場景轉換是iOS開發中最基本的需求。爲了讓本身的App更加的酷炫,咱們每每須要定製一些轉場效果。在iOS中,能夠經過多種方式設定轉場效果。這裏簡單列表以下:html
Modal presentationios
modalTransitionStyle
屬性。Navigation View Controller presentationapp
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所需的方法帶來的。我將在下篇文章討論這個問題。動畫