本來(lái)想寫(xiě)一些高大上的東西,例如運(yùn)行時(shí)機(jī)制,以及關(guān)于上架方面的新的.想了好久,我認(rèn)為自己的水平還處于UI學(xué)徒的汪洋大海中 ,開(kāi)發(fā)張的很多很多問(wèn)題,其實(shí)你只需要一個(gè)谷歌瀏覽器,提問(wèn)的當(dāng)很多都是手到擒來(lái)的.話說(shuō)還是有很多人,學(xué)歷高,開(kāi)發(fā)中的問(wèn)題也多,不善于總結(jié).甚至只需要你百度一下,谷歌搜索就能解決的問(wèn)題,還是拿到群里,各種提問(wèn),苦逼的是,回答的時(shí)候,回答者,除非自己遇見(jiàn)過(guò)的驚天大坑,還是要依賴(lài)谷歌來(lái)回答.算不算是一種諷刺? 好像話又離題了.我認(rèn)為現(xiàn)在如果是初級(jí)程序員,完全不是面向?qū)ο缶幊?而是面向搜索引擎編程,只要get搜索的能力,那么%99.9999 的需求以及功能都是可以解決的.
為熟而已!
扯了這么多,還是拿一點(diǎn)最初級(jí)的知識(shí).獻(xiàn)給大家吧. 一來(lái)學(xué)習(xí)是為了分享,分享的同時(shí)也是提升,輸出.現(xiàn)在已經(jīng)不喜歡去copy一些技術(shù)文來(lái)糊弄讀者,一是對(duì)自己的不尊重,而是對(duì)原創(chuàng)作者尊重.這些我是頓時(shí)領(lǐng)悟到的.只有自己寫(xiě),自己輸出才是自己的.不怕寫(xiě)的不好,寫(xiě)的好了自然就有人看,寫(xiě)的不好,給自己看~~~
一般人用布局兩種StoreBoard跟純代碼.那種優(yōu)劣?
玩不轉(zhuǎn)StoreBoard的都喜歡用純代碼.不解釋.
(1)StoreBoard優(yōu)點(diǎn):
Auto Layout川背,做適配很方便畜伐;
多語(yǔ)言很方便夹抗;
靜態(tài)TableView,CollectionView極其方便桨仿;
最重要的是直觀,結(jié)構(gòu)清晰,一目了然菠隆!
沖突問(wèn)題:storyboard一般只是用于展示頁(yè)面布局氏淑,布局不是個(gè)經(jīng)常變動(dòng)的東西勃蜘,如果需要修改,修改的次數(shù)也非常的少假残。一般在團(tuán)隊(duì)中專(zhuān)門(mén)約定幾名負(fù)責(zé)人專(zhuān)門(mén)修改頁(yè)面布局就可以了缭贡。如果真的需要很多人改,請(qǐng)拆分storyboard辉懒。
性能問(wèn)題:性能的瓶頸真的在這里嗎阳惹?有這些時(shí)間多多優(yōu)化一下代碼,多使用異步block的效果更為明顯吧眶俩。
大型項(xiàng)目的問(wèn)題:大型項(xiàng)目中細(xì)分storyboard不僅可以解決打開(kāi)卡頓的問(wèn)題莹汤,也會(huì)使產(chǎn)品線更為直觀。
復(fù)用問(wèn)題:storyboad的確不能復(fù)用颠印,可復(fù)用的組件可以用NIB進(jìn)行封裝纲岭,然后引入storyboad抹竹。
(3)什么時(shí)候使用storyboard?
組織多種view的層級(jí)關(guān)系荒勇,也就是傳說(shuō)中的segue柒莉。使用一些列表或表格單元的模板的時(shí)候。能使用storyboard的情況下盡量用storyboard沽翔。
什么時(shí)候不建議使用storyboard兢孝?
動(dòng)態(tài)或復(fù)雜布局,這時(shí)候可能需要用代碼來(lái)計(jì)算相關(guān)view的位置仅偎。如果一個(gè)view已經(jīng)用NIB或代碼實(shí)現(xiàn)
(4)什么時(shí)候使用nib跨蟹?
模態(tài)框(如登錄提示什么的)可復(fù)用視圖組件或模板
什么時(shí)候不推薦使用nib?
有動(dòng)態(tài)內(nèi)容的視圖
不方便在IB中進(jìn)行設(shè)計(jì)的試圖
(5)什么時(shí)候使用代碼橘沥?
純代碼好處就是靈活窗轩,接手項(xiàng)目的時(shí)候好改。缺點(diǎn)座咆,很明顯慢痢艺。
什么時(shí)候不推薦使用代碼?
什么時(shí)候使用代碼都是一個(gè)好方法介陶,但不一定是最好的堤舒。
純代碼可以使用masonry,可視化編程使用AutoLayout?
我自己的項(xiàng)目可以說(shuō)是所有界面均有SB和XIB 組合而成.很多人說(shuō)storyboard的跟XIB不好,實(shí)際是因?yàn)橥娴牟粔蛄锒?/p>
下面我來(lái)介紹一下storyboard 的幾個(gè)常用的用法
上面這張圖就是傳說(shuō)中的連線 ,segue 簡(jiǎn)稱(chēng)色鬼 你可以用它來(lái)傳值,也可以用它來(lái)跳轉(zhuǎn)控制器
- (IBAction)goAction:(id)sender
{
// 根據(jù)指定線的ID跳轉(zhuǎn)到目標(biāo)Vc
[self performSegueWithIdentifier:@"SendValue" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// segue.identifier:獲取連線的ID
if ([segue.identifier isEqualToString:@"SendValue"]) {
// segue.destinationViewController:獲取連線時(shí)所指的界面(VC)
ReceiveViewController *receive = segue.destinationViewController;
receive.name = @"Garvey";
receive.age = 110;
// 這里不需要指定跳轉(zhuǎn)了,因?yàn)樵诎磁さ氖录镆呀?jīng)有跳轉(zhuǎn)的代碼
// [self.navigationController pushViewController:receive animated:YES];
}
}
除此之外你還可以這樣用
你可能不知道上面的圖有什么卵用?
再來(lái)看一下方法內(nèi)部的實(shí)現(xiàn)
你看誰(shuí)說(shuō)SB不好跳轉(zhuǎn)控制器啥的.寫(xiě)個(gè)方法放在基類(lèi),只要保持規(guī)范,隨便你跳跳跳!
在看下SB做布局
在這里,你可以直接給控件做布局, top left button right 上左下右
寬,高,自身比例
水平,垂直居中.看英文跟符號(hào)你就能知道意思了.
在這里你可以做相對(duì)布局了.
一般,我的做法是直接 父控件 做等寬高?
然后MultiPlier 不是有一個(gè)1 嗎?
這里就是你可以調(diào)整比例 從0 -1 ??
至于怎么算比例,例如 我想做一個(gè)view 大小100 并且在任何6顯示正常 在5s 跟6S 相對(duì)根據(jù)比例來(lái)增大怎么做呢?
如果你直接寫(xiě)死寬度 100 跟高度100?
那么恭喜你,在6是正常的.在5S就會(huì)看起來(lái)大了一點(diǎn),因?yàn)闄C(jī)型跟分辨率高了.在6S就更小了.
是不是有這種情況.那么我用SB怎么做呢?先看分辨率機(jī)型圖
iphone5屏幕尺寸320 x 568屏幕分辨率640x1136
iphone6屏幕尺寸375 x 667屏幕分辨率640x1334
iphone6Plus屏幕尺寸414 x 736屏幕分辨率1080x1920哺呜。
設(shè)置的寬度跟高度,都是跟View去做的等寬高.
我是以6的原型去參照. 那么它就會(huì)去算比例,在6s的時(shí)候, 高度就會(huì)變成屏幕高度 * (100/667.0)
寬度就會(huì)變成 屏幕寬度*(100/375)
你看這樣他就會(huì)根據(jù)機(jī)型來(lái)覺(jué)得view的寬高,從而顯示不同的寬高.是不是很靈活呢?
這個(gè)選項(xiàng),決定了會(huì)不會(huì)參與編譯.如果你不勾選,那么就不會(huì)參與編譯.
簡(jiǎn)單點(diǎn)說(shuō)就是automaticallyAdjustsScrollViewInsets根據(jù)按所在界面的status bar舌缤,navigationbar,與tabbar的高度某残,自動(dòng)調(diào)整scrollview的 inset,設(shè)置為no国撵,不讓viewController調(diào)整,我們自己修改布局即可~
下面我還要花20000+ 的文字來(lái)描述SB 的好用之處.自己腦補(bǔ)去吧,任何技能你想要get記住,只能多谷歌,不要去百度.自己多去練習(xí),真的想別人免費(fèi)給你寫(xiě)文章文字來(lái)告訴你技能?只能告訴你想多了,哈哈哈.一切再好的文章不如親手實(shí)操幾遍來(lái)的快.