第一個swift項目

第一個swift項目

最近參加比賽昨天剛剛結(jié)束休息一天泡宿舍寫下總結(jié)湾趾。來總結(jié)下我的第一個swift項目和蚪,由于之前寫項目都是用的oc载矿,這是第一次寫項目很多swift項目的特性都沒用上(主要就會一點簡單的語法) 這次項目總的來說還是很完美的畢竟是第一次用swift些項目,但是也有些許的不足比如說在做一個界面的時候想用到iOS9推出的堆棧視圖但是由于時間的原因沒有用上用了自己計算的布局勉強應(yīng)付上了但是效果很是不好啊梧奢,還有就是之前說的swift的特性担神,鏈式 面向協(xié)議都是知道的少之又少楼吃。接下來的時間打算好好總結(jié)下項目,繼續(xù)學(xué)習(xí)知識妄讯。

在做項目的過程中隨手記錄的(有些是oc的但是swift差不多):

關(guān)于隱藏tabbar的三種方法:

1.直接隱藏

// 顯示tabBar
self.tabBarController.tabBar.hidden = NO;
// 隱藏tabBar
self.tabBarController.tabBar.hidden = YES;

2.push的時候設(shè)置隱藏常用的尤其是在Nav和tab結(jié)合使用的時候

// 在push跳轉(zhuǎn)時隱藏tabBar
UIViewController *vc2 = [UIViewController new];
vc2.hidesBottomBarWhenPushed = YES;
[vc1 pushViewController:vc2 animated:YES];

3.沒有用過但是感覺很不錯的方法

原理:UITabBarController的subview 共有兩個孩锡,一個叫 UITabBar,就是底下的那個 Bar捞挥;另一個叫UITranstionview,就是 Bar 上面的視圖忧吟。這兩個 view 下面還有其他的subview砌函,這就不用去管它了。把UITabBar的 y 向下移49個單位溜族,把UITranstionview 的 hight 加長 49 個單位讹俊。

- (void)hidesTabBar:(BOOL)hidden{
     
     [UIView beginAnimations:nil context:NULL];
     [UIView setAnimationDuration:0];
     
     for (UIView *view in self.tabBarController.view.subviews) {
         if ([view isKindOfClass:[UITabBar class]]) {
             if (hidden) {
                 [view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height, view.frame.size.width , view.frame.size.height)];
                
             }else{
                 [view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height - 49, view.frame.size.width, view.frame.size.height)];
                 
             }
         }else{
             if([view isKindOfClass:NSClassFromString(@"UITransitionView")]){
                 if (hidden) {
                     [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height)];
                     
                 }else{
                     [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height - 49 )];
                    
                 }
             }
         }
     }
     [UIView commitAnimations];
     
 }
 
 
 -(void)makeTabBarHidden:(BOOL)hide { // Custom code to hide TabBar
    if ( [self.tabBarController.view.subviews count] < 2 )
    {
        return;
    }
    UIView *contentView; if ( [[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] )
    {
        contentView = [self.tabBarController.view.subviews objectAtIndex:1];
    } else {
            contentView = [self.tabBarController.view.subviews objectAtIndex:0];
    }
    if (hide) {
        contentView.frame = self.tabBarController.view.bounds;
    } else {
            contentView.frame = CGRectMake(self.tabBarController.view.bounds.origin.x, self.tabBarController.view.bounds.origin.y,
                                           self.tabBarController.view.bounds.size.width, self.tabBarController.view.bounds.size.height -
                                           self.tabBarController.tabBar.frame.size.height);
    }
    self.tabBarController.tabBar.hidden = hide;
}


關(guān)于swift的協(xié)議問題

1.聲明除了語法與oc幾乎一樣 而且更加簡單
2.在聲明上的區(qū)別

//特殊的聲明方式
@objc protocol FirstViewControllerDelegate: NSObjectProtocol{

optional func firstDelegate(returnString:String)

}

在這個代理的聲明中,可以明顯看出煌抒,增加了一些額外的修飾符

1》引入@objc是為了引入 optional(可選)仍劈,用 optional 修飾代理方法,那么這個方法就變成可選方法寡壮,無論在代理對象中是否實現(xiàn)贩疙,都不受影響讹弯。
2》引入 NSObjectProtocol 是因為我們?nèi)绻胗?weak 修飾代理屬性,需要繼承自這個類这溅。

關(guān)于切換根視圖(登陸后切換根視圖)

1.在appdelegate中

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];  
   A *vc = [[A alloc] init]; // init會執(zhí)行viewDidLoad viewWillAppear   
   vc.view.backgroundColor  = [UIColor redColor];  
   self.window.rootViewController = vc;  
   [self.window makeKeyAndVisible];  

2.在a中 b設(shè)置為根視圖

注意點出來了组民,如果使用的是presentViewController則在設(shè)置B為根控制器的方法就必須在viewDidLoad與viewWillAppear之后進行設(shè)置。不然如下

3.在b中設(shè)置b為根視圖
(建議在控制器已經(jīng)完全在window上展示再切換window的根控制器)

- (void)viewDidAppear:(BOOL)animated {  
    [super viewDidAppear:animated];  
      
          
    AppDelegate *app = [UIApplication sharedApplication].delegate; // 獲取當前app單例  
  
    NSLog(@"appdelegate is %@",app);  
      
    UIViewController *vc = app.window.rootViewController;  
      
    app.window.rootViewController = self;  
      
    [vc removeFromParentViewController];  
    NSLog(@"當前的根控制器為:%@",self.view.window.rootViewController);  
}  


A.view = nil

對應(yīng)上面的方法需要將A銷毀減小內(nèi)存的消耗

還有一種方法

方法二:(提供個基本思路悲靴,實際情況大家研究下了)

可以創(chuàng)建多個window臭胜,在執(zhí)行完成后可以設(shè)置其window為self.window,并讓其成為key window癞尚,然后只要想使用的話就只可以將self.window賦值想要展示的window可此時銷毀剛才的window耸三,然后再將[self.window makeKeyandVisible];

關(guān)于tableView 的cell被遮擋的問題

1.沒有正確設(shè)置tableVIew的高度,高度過高

tableview的高度設(shè)置有錯誤,應(yīng)該為self.view.frame.size.hight - self.tabbarController.tabbar.frame.size.height - 64,就可以避免遮擋 

或者

self.automaticallyAdjustsScrollViewInsets = NO 設(shè)置后默認tableview 的contentInset = UIEdgeInsetsZero; 否則就是會減去 導(dǎo)航欄 + 底部tababr 高度浇揩,如果要從頭開始布局 仪壮,可以使用self.edgesForExtendedLayout = UIRectEdgeTop; 讓tableview 頂部從 0 。0 開始布局临燃,底部自動減去 64 

關(guān)于導(dǎo)航欄的問題

  1. self.navigationController?.setNavigationBarHidden(false, animated: true)
  2. 設(shè)置viewController的title和設(shè)置UItabbarItem的標題
 在寫代碼的時候設(shè)計的基類修改標題欄的方法采用的是self.title = navString 但是在實際的使用的中發(fā)現(xiàn)睛驳,我調(diào)用這個方法的時候出現(xiàn)了在我底部的TABbar產(chǎn)生了一個新的item,當時以為我自定義的tabbar出現(xiàn)了問題但是找了一圈沒找到膜廊。乏沸。。爪瓜。然后百度下找到了我想要的一切

self.navigationItem.title
= @"my title"; sets navigation bar title.

self.tabBarItem.title
= @"my title"; sets tab bar title.

self.title
= @"my title"; sets both of these.

關(guān)于寫界面的一點提醒

  1. 當寫界面的的時候出現(xiàn)了不符合自己的意圖的樣子蹬跃,可以進行查看分層和設(shè)置背景顏色的方法來進行調(diào)試或者可以frameDebuging(真機)

關(guān)于調(diào)用父類方法(調(diào)用自定義tabbar方法)

 let tab = self.navigationController?.tabBarController as! AnimationTabBarController
//        獲取父類的方法
//        print(self.navigationController?.tabBarController?.superclass ?? AnyClass.self)
//        調(diào)用父類的方法
        tab.setSelectIndex(from: 0, to: 2)

關(guān)于hidden隱藏時的動畫

let animation = CATransition()
animation.type = kCATransitionFade
animation.duration = 0.4
view.layer.add(animation, forKey: nil)
view.isHidden = false

關(guān)于swift數(shù)組切片

1.原網(wǎng)址
嘗試了好幾種辦法但是最終都沒有解決,與這個博客遇到的問題差不多铆铆,我遇到的問題是將數(shù)組分成幾個分別出作為數(shù)據(jù)源(因為我寫的蹩腳的接口弄的不會分開)
最終的實現(xiàn)辦法

memberIdStrListToProcess = Array(groupMemberIdStrList[0…9])
要加一個array然后再接片操作跟Python有些不同蝶缀。(前面加了Array強轉(zhuǎn))

關(guān)于數(shù)組

1.今天在創(chuàng)建數(shù)組然后從網(wǎng)絡(luò)獲取數(shù)據(jù)并添加到數(shù)組的時候出現(xiàn)了問題。薄货。翁都。
我是這樣寫的

var recordData = Array<Array<Any>>()
犯了一個明顯的錯誤。谅猾。柄慰。沒有進行初始化這是單單的進行了聲明。税娜。因為swift的語法搞得我有點忘記初始化了坐搔。【淳兀總結(jié)下
數(shù)據(jù)數(shù)組 記得創(chuàng)建是要進行初始化(創(chuàng)建類型要: 聲明但是沒有初始化概行,= ( )這樣是進行初始化并聲明 !) 括號的問題

swift調(diào)用oc的block

1.swift調(diào)用oc的block弧岳,遇到這個問題我有點頭大啊凳忙。业踏。。oc的block還沒學(xué)多好呢消略。堡称。swift更是差勁現(xiàn)在可以好了直接開始混編了,說正題艺演,解決方法swift調(diào)用ocBlock 總結(jié)如下

// oc的block
返回值(^名稱)(類型 傳值)
// swift里調(diào)用
名稱 = {(傳值!!(沒有類型))->(返回值) in 
 
}

2.還有一點之前看的swift調(diào)用不了oc的可選協(xié)議却紧。好像有辦法但是時間緊迫先放過了。()

oc設(shè)置導(dǎo)航欄文字富文本顯示

設(shè)置富文本將以字典的樣子去設(shè)置
[self.navigationController.navigationBar setTitleTextAttributes:

@{NSFontAttributeName:[UIFont systemFontOfSize:19],

NSForegroundColorAttributeName:[UIColor redColor]}];

將圖片轉(zhuǎn)成base64字符串

let image = UIImage(name:"照片")
//將圖片轉(zhuǎn)成data
let imageData = UIImagePNGRepresentation(image!)
//將data轉(zhuǎn)成base64的字符串
let imageBase64String = imageData?.base64EncodeString()
//可以使用base64的字符串類型上傳到服務(wù)器了
//還要將base64進行urlencode的話
let imageString = imageBase64String.addingPercentEncoding(withAllowedCharacters: .alphanumerics)

bas64字符串轉(zhuǎn)成圖片

//將base64的圖片字符串轉(zhuǎn)成Data
let imageData2 = Data(base64Encoded: imageBase64String!)

//將data轉(zhuǎn)成照片
let image2 =UIImage(data:imageData2!)
//將data轉(zhuǎn)成uiimage 
let photo = UIImage(data:image2)

ios11 保存圖片閃退

原文
ios10和ios11 的這個方面的權(quán)限有些不同查看博客即可

設(shè)置狀態(tài)欄設(shè)置

首先放出幾個網(wǎng)上寫的不錯的博客吧ios 狀態(tài)欄statusBar的背景顏色

//設(shè)置狀態(tài)欄顏色
- (void)setStatusBarBackgroundColor:(UIColor *)color {
    
    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];
  
    [self setStatusBarBackgroundColor:[UIColor redColor]];
    self.view.backgroundColor = [UIColor yellowColor];
}

swift實現(xiàn)的
還有好多但是不服我的情況我就直接刪除了胎撤。晓殊。。說下我的情況吧 我的程序運行在ios11 上是完全ok的 但是運行在ios9上狀態(tài)欄莫名的就是黑色的伤提。巫俺。。后來發(fā)現(xiàn)是我自定義的導(dǎo)航欄的位置出現(xiàn)了問題 少算了20.肿男。汗顏啊介汹。~

ios 截屏保存相冊(swift)版

文章寫的很好也有很多的地方可以學(xué)習(xí)

tableView顯示滑動條

self.lazyTableView.showsHorizontalScrollIndicator為顯示橫向的滑動條(Heng)
self.lazyTableView.showsVerticalScrollIndicator
為顯示縱向的滑動條 其實沒必要去記錄的自己試下就可以啦

ios設(shè)置返回按鈕的樣子自定義(oc版)

ios修改返回按鈕的幾種方式嘗試了下最后一種方式最好用了,之前的方法都是更改了圖片但是標題沒有發(fā)生改變舶沛,采用第三種方法

//創(chuàng)建一個UIButton
UIButton *backButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];
//設(shè)置UIButton的圖像
[backButton setImage:[UIImage imageNamed:@"left_select_img.png"] forState:UIControlStateNormal];
//給UIButton綁定一個方法嘹承,在這個方法中進行popViewControllerAnimated
[backButton addTarget:self action:@selector(backItemClick) forControlEvents:UIControlEventTouchUpInside];
//然后通過系統(tǒng)給的自定義BarButtonItem的方法創(chuàng)建BarButtonItem
UIBarButtonItem *backItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
//覆蓋返回按鍵
self.navigationItem.leftBarButtonItem = backItem;

等間距布局(堆棧視圖)

masonry等間距布局

PHP的數(shù)組

1.首先是數(shù)組支持的類型,PHP的數(shù)組有兩種類型如庭,第一種只保存值的索引數(shù)組叹卷,另一種是保存名值對(name/key)關(guān)聯(lián)數(shù)組(類似其他語言的字典)

Linux導(dǎo)入數(shù)據(jù)庫

之前有用過但是又忘記了。坪它。在此記錄下吧首先導(dǎo)出所需要的數(shù)據(jù)庫骤竹,我用的是Navicat直接右鍵導(dǎo)出就OK了,然后是在服務(wù)器上導(dǎo)入往毡,服務(wù)器為centos導(dǎo)入方法有兩種蒙揣。第一種方法:

選擇數(shù)據(jù)庫
mysql>use abc;
設(shè)置數(shù)據(jù)庫編碼
mysql>set names utf8;
導(dǎo)入數(shù)據(jù)(注意sql文件的路徑)
mysql>source /home/abc/abc.sql;
第二種方法(常用方法)

方法二(常用):

    格式:mysql -u用戶名 -p密碼 數(shù)據(jù)庫名 < 數(shù)據(jù)庫名.sql 
    舉例:mysql -uabc_f -p abc < abc.sql

順便記錄下導(dǎo)出的方法:

一、導(dǎo)出數(shù)據(jù)和表結(jié)構(gòu):

格式: mysqldump -u用戶名 -p密碼 數(shù)據(jù)庫名 > 數(shù)據(jù)庫名.sql 
舉例: /usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql 
敲回車后會提示輸入密碼

二开瞭、只導(dǎo)出表結(jié)構(gòu)

格式:mysqldump -u用戶名 -p密碼 -d 數(shù)據(jù)庫名 > 數(shù)據(jù)庫名.sql 
舉例:/usr/local/mysql/bin/ mysqldump -uroot -p -d abc > abc.sql 
注:/usr/local/mysql/bin/ —> mysql的data目錄

遇到的重大問題

1.自定義tabbar總是出問題 最終是修改一個屬性解決的
2.方法前面加objc
3.持續(xù)更新 繼續(xù)干找問題記錄下來 學(xué)習(xí) 研究 抽時間

總結(jié)

1.第一次用些swift些項目懒震,第一次用PHP做了些簡單的app的接口~總的來說還是很開心的

后記

1.iOS oc方面:kvo屬性監(jiān)聽,通知的寫法惩阶,block的用法挎狸,了解runtime扣汪,wkwebView有很多的知識點
iOS swift方面: swift閉包知識断楷,wkwebView有很多的知識點,事件的分發(fā)機制崭别,通知冬筒,學(xué)習(xí)rxswift swift 閉包的使用
2.學(xué)習(xí)工具: sketch還有和他配好寫動畫的叫恐锣。。舞痰。
3.學(xué)習(xí)控件堆棧視圖:UIStackView UIStackView Intrinsic Content Size
4.學(xué)習(xí)了解本地數(shù)據(jù)庫 realm charts(畫圖)點的擬合
5.后續(xù)將這些東西的學(xué)習(xí)筆記和demon上傳

總結(jié)下

上面的都是在所項目的時候記錄的一些東西土榴,接下來的一個月里面有幾件事情要去忙首先是參加cccc然后是小程序再有就是將這個項目繼續(xù)完成升級,然后學(xué)習(xí)上面提到的東西响牛。陸續(xù)我要記錄下我學(xué)習(xí)的這些知識玷禽。 好了就這樣了,最后分享下項目吧 GitHub項目地址()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呀打,一起剝皮案震驚了整個濱河市矢赁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贬丛,老刑警劉巖撩银,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異豺憔,居然都是意外死亡额获,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門恭应,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抄邀,“玉大人,你說我怎么就攤上這事暮屡〕访” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵褒纲,是天一觀的道長准夷。 經(jīng)常有香客問我,道長莺掠,這世上最難降的妖魔是什么衫嵌? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮彻秆,結(jié)果婚禮上楔绞,老公的妹妹穿的比我還像新娘。我一直安慰自己唇兑,他們只是感情好酒朵,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扎附,像睡著了一般蔫耽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上留夜,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天匙铡,我揣著相機與錄音图甜,去河邊找鬼。 笑死鳖眼,一個胖子當著我的面吹牛黑毅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钦讳,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼矿瘦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愿卒?” 一聲冷哼從身側(cè)響起匪凡,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掘猿,沒想到半個月后病游,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡稠通,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年衬衬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片改橘。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡滋尉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出飞主,到底是詐尸還是另有隱情狮惜,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布碌识,位于F島的核電站碾篡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏筏餐。R本人自食惡果不足惜开泽,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魁瞪。 院中可真熱鬧穆律,春花似錦、人聲如沸导俘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旅薄。三九已至辅髓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背利朵。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猎莲,地道東北人绍弟。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像著洼,于是被迫代替她去往敵國和親樟遣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 2017年3月身笤,不明真相的我被南子拉入一個群里豹悬,然后開始“100天~每天1小時做自己”的活動。這是第一次沒有作好...
    懶蟲子的美麗人生閱讀 312評論 0 3
  • 1. 里面還有reset.css文件,重置默認樣式 2. 解決窗口縮小時,拖動滾動條會出現(xiàn)空白區(qū)域 mi...
    大佬肥1閱讀 185評論 0 0
  • 當一件事情你很清楚當下必須要做液荸,而沒有做瞻佛。然后做了一件當下沒有價值的事情,產(chǎn)生的情緒理解為懊惱娇钱。 我有很多...
    劉亞琴閱讀 206評論 0 0
  • 年輕的時候笔喉,我們都曾以為十年是好長的一段時光,我們都曾憧憬自己十年之后的樣子硝皂。然而常挚,時光匆匆,屈指數(shù)來我們聽《十年...
    橙維維閱讀 2,988評論 0 3