iOS中的轉場研究(1)

場景轉換是iOS開發中最基本的需求。爲了讓本身的App更加的酷炫,咱們每每須要定製一些轉場效果。在iOS中,能夠經過多種方式設定轉場效果。這裏簡單列表以下:html

  • Modal presentationios

    1. 設定ViewController的modalTransitionStyle屬性。
      這種方式也對應Storyboard中對應的segue transition的設置。這個屬性是一個枚舉類型,其值表明已經定製的幾種轉場風格。這種方式也是最簡單的轉場,不帶有任何自定義的轉場效果代碼。
    2. 使用UIView的animation API實現自定義的動畫。
      這種方式是比較常見實現方式。除了官方的文檔之外,大量的Blog文章都會詳細講解這些API的用法。UIView的animation API的使用比較直觀,相對來講也是一種比較容易學習的動畫實現方式。
  • Navigation View Controller presentationapp

    1. 使用UIView的animation API。
      與Modal presentation相同,儘管在Storyboard中有專門爲Navigation View Controller定製的Push segue(iOS8中被Show segue取代,由於後者支持iOS8中引進的Adaptive AutoLayout),可是Push segue並無transtion屬性,因此若是須要定製轉場效果,可使用UIVIew,使用方法和Modal presentation相同。
    2. 使用CATransition類。
      CATransition看起來更像爲Navigation View Controller和TabBar View Controller這樣的容器Controller定製的轉場效果類。提供了不少內置的的動畫效果。CATransition還能夠結合CoreImage的濾鏡CIFilter共同實現很炫的場景轉換。若想詳細瞭解CATransition的用法,能夠讀一讀蘋果的文檔

咱們注意到,轉場每每發生在流程切換的時候。因此上面的轉場效果代碼,每每會放在自定義的轉場方法中(多見於使用Nib開發)或放在自定義的UIStoryboardSegue類中(多見於使用Storyboard開發)。因此不少時候,咱們每每會碰到原生的轉場方法與定製的動畫效果有必定衝突。由於像presentViewController:animated:completion:這類方法自己就自帶有內置的動畫效果,自定義的動畫效果每每在這個方法以外。因此不少時候須要用一些trick來避免這些問題。所以代碼的可讀性每每不會很好,而且寫的很差的時候還會帶來效率方面的問題。ide

iOS7之後,蘋果引進了新的Transition API。這些API的使用方式,蘋果沒有給出一個官方的Guide,可是在網上,已經有不少Blog和教程講解如何使用這些API,好比這篇文章
新的Transition API徹底改變了上面提到的動畫與原生轉場接口不兼容的問題。在新的API中,咱們能夠將動畫效果代碼單獨封裝到animator對象中,在設定好View Controller的transitoningDelegate後,再調用原生的轉場方法,就會自動使用定製的動畫效果。考慮到如今大部分App已經逐漸放棄了對iOS6的支持,因此這種方法是目前推薦的轉場效果定製方法。單獨封裝的動畫效果類在代碼管理上也更加方便。學習

這裏須要注意的一點,iOS6中引入的Storyboard Unwind Segue每每都須要一個Container View Controller。一個很常見的問題就是新手在定製Segue的時候每每會發生自定義的Unwind Segue不起做用。這個問題通常都是因爲沒有正確實現Container View Controller所需的方法帶來的。我將在下篇文章討論這個問題。動畫

相關文章
相關標籤/搜索