1. 程式人生 > >iOS開發時如何使用 Launch Screen Storyboard

iOS開發時如何使用 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的工程設定裡面指定啟動圖來源:


2014-12-24-005.png

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


2014-12-24-003.png

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


2014-12-24-004.png

你可以在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)


2014-12-24-iphone.png


在ipad(常規寬度)裝置上,初始化後的啟動屏在分屏控制器裡展示的master and detail view controllers


2014-12-24-ipad.png

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


2014-12-24-006.png

儘管這種方式遠遠沒有達到完美的地步,但是在適配(除了ipad分屏)所有裝置使用者初始化介面 方面多多少少做了貢獻。呈現給使用者的靜態啟動圖集雖然效果足夠好,但是自己不得不做出判斷。

Runtime Generation (added 28-Dec-2014)

儘管蘋果文件中並沒有清楚地說明,但需要的啟動圖片在runtime時被生成了。在WWDC 2014
Platform State of the Union上被簡短的提到過。你可以通過App在真機或者模擬器上生成的資料夾證實。被特定裝置需要的啟動圖被快取在Library/Caches/LaunchImages。下面的截圖顯示了iPad Air 2生成的啟動圖片


2014-12-28-001.png


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


2014-12-28-002.png

---------------------

對於如何使用LaunchScreen自定義啟動動畫,大家可以參考通過LaunchScreen自定義啟動動畫
DEMO



文/Flying_Einstein(簡書作者)
原文連結:http://www.jianshu.com/p/77054dccafdb
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。