靜態(tài)啟動圖片
啟動圖片是iOS加載App的時候系統(tǒng)響應(yīng)的直觀呈現(xiàn)。近幾年作煌,隨著屏幕尺寸的增多清蚀,制作相應(yīng)的靜態(tài)圖片
就變成一件十分讓人頭疼的事。在下面递瑰,我列舉了一些 啟動圖片的尺寸(尺寸包括狀態(tài)條區(qū)域)祟牲。為了簡潔,我省略了橫屏的版本:
iPad 2 and iPad mini (@1x): 768 x 1024
iPad and iPad mini (retina @2x): 1536 x 2048
iPhone 4s (retina @2x) 640 x 960
iPhone 5 (@2x): 640 x 1136
iPhone 6 (@2x): 750 x 1334
iPhone 6 Plus (@3x): 1242 x 2208
好消息是抖部,在Xcode 6 and iOS 8允許使用NIB或storyboard launch screen 文件说贝。利用auto layout 和size classes的優(yōu)勢,一個單獨的NIB或storyboard文件在runtime時可以自動的去創(chuàng)建啟動圖片集慎颗。這就意味著乡恕,你想在全屏模式下支持iPhone 6 和 iPhone 6 Plus的話就無需提供匹配的的啟動圖集或者如上面列舉出現(xiàn)來的不同尺寸的靜態(tài)圖片
( 26-Dec-2014 更新: 一定要搞清楚,支持iPhone 6 and iPhone 6 Plus 俯萎,要求你提供啟動圖片集合傲宜,可以是靜態(tài)啟動圖集
(static launch images),也可以是啟動圖布局文件
( launch screen file)).
使用啟動圖片文件
Xcode6在創(chuàng)建新工程時默認(rèn)添加了一個LaunchScreen.xib文件夫啊。對一個已經(jīng)存在的工程可以用Launch Screen 模板創(chuàng)建一個新的文件函卒。(譯者注:在Xcode7里,默認(rèn)添加的是LaunchScreen.storyboard文件撇眯,筆者因此遇到過一個大坑LaunchImage和LaunchScreen.xib混用出現(xiàn)的坑)
這一步將會在工程中添加一個NIB文件报嵌,你可以在初始化的啟動屏上添加單個視圖或者視圖控制器。如果你有多個視圖熊榛,那么你則需要放棄Launch Screen模板锚国,應(yīng)該添加一個storyboard。然后在target的工程設(shè)置里面指定啟動圖來源:
2014-12-24-005.png
這一步將會把 鍵 Launch screen interface file base name(UILaunchStoryboardName)加到應(yīng)用的plist 文件中
2014-12-24-003.png
接下來玄坦,你可以在Interface Builder對啟動視圖進行布局血筑,使autolayout和size classes作為必選項,為不同的屏幕創(chuàng)建匹配的圖片。Xcode模板提供的風(fēng)格豺总,只是對app的名稱和所有權(quán)進行了布局梆砸,這并不是一個最理想的范例。在你添加自己的視圖之前园欣,或許你想刪掉它們:
2014-12-24-004.png
你可以在Xcode中預(yù)覽storyboard,或者在模擬器和真機上進行測試帖世。盡管啟動屏的展示的時間很短,但是你會發(fā)現(xiàn)沸枯,如果在App delegate的application:didFinishLaunchingWithOptions:方法中添加斷點是有用的
Launch Screen 的局限性
系統(tǒng)在啟動app之前裝載啟動文件日矫,在這個過程中可能對app包含的一些文件產(chǎn)生限制(一些限制可能迫使你回退到 使用靜態(tài)圖片集
):
app還沒裝載完畢,一些視圖的層級結(jié)構(gòu)還不存在绑榴,系統(tǒng)不能調(diào)用app中任何自定義的視圖控制器去啟動代碼哪轿。
你僅僅能使用標(biāo)準(zhǔn)的UIKit類,所以你可以用UIView或者UIViewController,自定義的子類則不可以翔怎。如果你嘗試著去設(shè)置子類窃诉,將會得到一個“配置無效”的錯誤。
啟動文件僅僅能夠用基礎(chǔ)的UIKit視圖赤套,像UIImageView 和UILabel飘痛,不能使用 UIWebView。
如果你用了storyboard容握,你可以指定多個視圖控制器宣脉,但是仍舊有一些限制。例如剔氏,你可以在navagation或者tab bar controller嵌入幾個視圖控制器塑猖,但是一些更復(fù)雜的類,像UISplitViewController 并不起作用 (至少現(xiàn)在如此).
本地化(譯者注:我理解的是自己創(chuàng)建的谈跛,而非采用模板)啟動圖布局文件
目前看起來并沒有什么不好的影響羊苟。也許,你采用的最基本的本地化啟動圖布局文件
可能是不在啟動圖上顯示文字感憾。
你不能為iPhone和iPad指定不同的啟動文件蜡励。因為auto layout 和size classes的局限性,如果這些設(shè)備有著顯著不同的界面吹菱,就會出現(xiàn)問題巍虫。
如果你正在ios7系統(tǒng)上進行開發(fā)彭则,那么你仍舊需要包含靜態(tài)啟動圖集
鳍刷。你可以包含啟動圖布局文件
和靜態(tài)啟動圖集
。那么俯抖,運行ios8系統(tǒng)的iPhone6將會使用啟動圖布局文件
输瓜,而運行ios7系統(tǒng)的設(shè)備則回退使用靜態(tài)啟動圖集
摹察。
Split View Controllers
如果你的根視圖控制器是SplitViewControllers,至少在iOS8.1系統(tǒng)买喧,你并沒有太多的選擇姨俩。如果你將SplitViewControllers添加到launch screen storyboard,它不會被裝載北戏。由于在iOS8.1中SplitViewControllers復(fù)雜度的增加负芋,我懷疑在后續(xù)版本中也不會被支持。
除了回退去使用靜態(tài)啟動圖集
嗜愈,唯一能夠選擇的方式看起來只有放棄 分屏使用旧蛾。例如,考慮一下接下來使用SplitViewController的iPhone和ipad的啟動屏蠕嫁。在iphone(寬度較窄)設(shè)備上锨天,初始化的屏幕僅展示主視圖控制器(一個嵌入在Navigation Controller里的tableview controller)
2014-12-24-iphone.png
在ipad(常規(guī)寬度)設(shè)備上,初始化后的啟動屏在分屏控制器里展示的master and detail view controllers
2014-12-24-ipad.png
這是一種常見的啟動方式剃毒,但是在這種情況下病袄,沒有好的方法使用啟動圖布局文件
.我的建議,即我能得到的最接近的方式是忽略啟動屏赘阀,用一個嵌套在navigation controller的view controller 作為啟動屏
2014-12-24-006.png
盡管這種方式遠(yuǎn)遠(yuǎn)沒有達(dá)到完美的地步益缠,但是在適配(除了ipad分屏)所有設(shè)備用戶初始化界面 方面多多少少做了貢獻。呈現(xiàn)給用戶的靜態(tài)啟動圖集
雖然效果足夠好基公,但是自己不得不做出判斷左刽。
Runtime Generation (added 28-Dec-2014)
盡管蘋果文檔中并沒有清楚地說明,但需要的啟動圖片在runtime時被生成了酌媒。在WWDC 2014Platform State of the Union上被簡短的提到過欠痴。你可以通過App在真機或者模擬器上生成的文件夾證實。被特定設(shè)備需要的啟動圖被緩存在Library/Caches/LaunchImages秒咨。下面的截屏顯示了iPad Air 2生成的啟動圖片
作為對比喇辽,下面的截屏顯示了iPhone 6 Plus生成的啟動圖片
2014-12-28-002.png
。