https://www.jianshu.com/p/77054dccafdb
原文:http://useyourloaf.com/blog/using-a-launch-screen-storyboard/
靜態啟動圖片
啟動圖片是iOS加載App的時候系統響應的直觀呈現。近幾年,隨着屏幕尺寸的增多,制作相應的靜態圖片
就變成一件十分讓人頭疼的事。在下面,我列舉了一些 啟動圖片的尺寸(尺寸包括狀態條區域)。為了簡潔,我省略了橫屏的版本:
- 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的優勢,一個單獨的NIB或storyboard文件在runtime時可以自動的去創建啟動圖片集。這就意味着,你想在全屏模式下支持iPhone 6 和 iPhone 6 Plus的話就無需提供匹配的的啟動圖集或者如上面列舉出現來的不同尺寸的靜態圖片
( 26-Dec-2014 更新: 一定要搞清楚,支持iPhone 6 and iPhone 6 Plus ,要求你提供啟動圖片集合,可以是靜態啟動圖集
(static launch images),也可以是啟動圖布局文件
( launch screen file)).
使用啟動圖片文件
Xcode6在創建新工程時默認添加了一個LaunchScreen.xib文件。對一個已經存在的工程可以用Launch Screen 模板創建一個新的文件。(譯者注:在Xcode7里,默認添加的是LaunchScreen.storyboard文件,筆者因此遇到過一個大坑LaunchImage和LaunchScreen.xib混用出現的坑)

這一步將會在工程中添加一個NIB文件,你可以在初始化的啟動屏上添加單個視圖或者視圖控制器。如果你有多個視圖,那么你則需要放棄Launch Screen模板,應該添加一個storyboard。然后在target的工程設置里面指定啟動圖來源:

這一步將會把 鍵 Launch screen interface file base name
(UILaunchStoryboardName)加到應用的plist 文件中

接下來,你可以在Interface Builder對啟動視圖進行布局,使autolayout和size classes作為必選項,為不同的屏幕創建匹配的圖片。Xcode模板提供的風格,只是對app的名稱和所有權進行了布局,這並不是一個最理想的范例。在你添加自己的視圖之前,或許你想刪掉它們:

你可以在Xcode中預覽storyboard,或者在模擬器和真機上進行測試。盡管啟動屏的展示的時間很短,但是你會發現,如果在App delegate的application:didFinishLaunchingWithOptions:方法中添加斷點是有用的
Launch Screen 的局限性
系統在啟動app之前裝載啟動文件,在這個過程中可能對app包含的一些文件產生限制(一些限制可能迫使你回退到 使用靜態圖片集
):
- app還沒裝載完畢,一些視圖的層級結構還不存在,系統不能調用app中任何自定義的視圖控制器去啟動代碼。
- 你僅僅能使用標准的UIKit類,所以你可以用UIView或者UIViewController,自定義的子類則不可以。如果你嘗試着去設置子類,將會得到一個“配置無效”的錯誤。
- 啟動文件僅僅能夠用基礎的UIKit視圖,像UIImageView 和UILabel,不能使用 UIWebView。
- 如果你用了storyboard,你可以指定多個視圖控制器,但是仍舊有一些限制。例如,你可以在navagation或者tab bar controller嵌入幾個視圖控制器,但是一些更復雜的類,像UISplitViewController 並不起作用 (至少現在如此).
- 本地化(譯者注:我理解的是自己創建的,而非采用模板)
啟動圖布局文件
目前看起來並沒有什么不好的影響。也許,你采用的最基本的本地化啟動圖布局文件
可能是不在啟動圖上顯示文字。 - 你不能為iPhone和iPad指定不同的啟動文件。因為auto layout 和size classes的局限性,如果這些設備有着顯著不同的界面,就會出現問題。
如果你正在ios7系統上進行開發,那么你仍舊需要包含 靜態啟動圖集
。你可以包含啟動圖布局文件
和靜態啟動圖集
。那么,運行ios8系統的iPhone6將會使用啟動圖布局文件
,而運行ios7系統的設備則回退使用 靜態啟動圖集
。
Split View Controllers
如果你的根視圖控制器是SplitViewControllers,至少在iOS8.1系統,你並沒有太多的選擇。如果你將SplitViewControllers添加到launch screen storyboard,它不會被裝載。由於在iOS8.1中SplitViewControllers復雜度的增加,我懷疑在后續版本中也不會被支持。
除了回退去使用 靜態啟動圖集
,唯一能夠選擇的方式看起來只有放棄 分屏使用。例如,考慮一下接下來使用SplitViewController的iPhone和ipad的啟動屏。在iphone(寬度較窄)設備上,初始化的屏幕僅展示主視圖控制器(一個嵌入在Navigation Controller里的tableview controller)

在ipad(常規寬度)設備上,初始化后的啟動屏在分屏控制器里展示的master and detail view controllers

這是一種常見的啟動方式,但是在這種情況下,沒有好的方法使用啟動圖布局文件
.我的建議,即我能得到的最接近的方式是忽略啟動屏,用一個嵌套在navigation controller的view controller 作為啟動屏

盡管這種方式遠遠沒有達到完美的地步,但是在適配(除了ipad分屏)所有設備用戶初始化界面 方面多多少少做了貢獻。呈現給用戶的靜態啟動圖集
雖然效果足夠好,但是自己不得不做出判斷。
Runtime Generation (added 28-Dec-2014)
盡管蘋果文檔中並沒有清楚地說明,但需要的啟動圖片在runtime時被生成了。在WWDC 2014
Platform State of the Union上被簡短的提到過。你可以通過App在真機或者模擬器上生成的文件夾證實。被特定設備需要的啟動圖被緩存在Library/Caches/LaunchImages。下面的截屏顯示了iPad Air 2生成的啟動圖片

作為對比,下面的截屏顯示了iPhone 6 Plus生成的啟動圖片

對於如何使用LaunchScreen自定義啟動動畫,大家可以參考通過LaunchScreen自定義啟動動畫
DEMO
作者:AimLay
鏈接:https://www.jianshu.com/p/77054dccafdb
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。