以前隨手寫過一篇《使用UIScreenEdgePanGestureRecognizer實現swipe to pop效果》,挺粗糙的。html
如今使用默認模板建立的iOS App都支持手勢返回功能,若是導航欄的返回按鈕是自定義的那麼則會失效,也能夠參考這裏手動設置無效。ios
[cpp] view plain copyapp
若是是由於自定義導航按鈕而致使手勢返回失效,那麼能夠在NavigationController的viewDidLoad函數中添加以下代碼:函數
[cpp] view plain copy動畫
這樣寫了之後就能夠經過手勢滑動返回上一層了,可是若是在push過程當中觸發手勢滑動返回,會致使導航欄崩潰(從日誌中能夠看出)。針對這個問題,咱們須要在pop過程禁用手勢滑動返回功能:ui
[cpp] view plain copyspa
[cpp] view plain copy.net
除了使用系統默認的動畫,還可使用自定義過渡動畫(豐滿的文檔):代理
[cpp] view plain copy日誌
以下這個代理方法是用來提供一個非交互式的過渡動畫的:
[cpp] view plain copy
而下面這個代理方法則是提供交互式動畫:
[cpp] view plain copy
這兩個組合起來使用。首先,咱們須要有個動畫:
[cpp] view plain copy
[cpp] view plain copy
其次,交互式動畫是經過
[cpp] view plain copy
來維護的,在滑動過程當中根據滑動距離來進行更新:
[cpp] view plain copy
當手勢結束時要作出收尾動做:
[cpp] view plain copy
一樣地,自定義的動畫也會有上面提到的導航欄崩潰問題,也能夠經過相似的方法來解決:
[cpp] view plain copy
補充:位於當前navgationController的第一個([0])viewController時須要設置手勢代理,不響應。