原文地址:http://weizhe.me/ios-7-back-gesture-sample/
在智能機越來越普及,螢幕越做越大的當下,滑動返回手勢已經成為了一個應用的標配功能,甚至可以說,不能滑動返回是一種反人類的互動體驗。
滑動返回現在大致有以下3種類型: 使用 UISwipeGestureRecognizer 實現,效果為使用者在螢幕中向右輕掃手指,頁面返回。 使用 UIPanGestureRecognizer 實現,效果為使用者在螢幕中向右滑動手指,鬆開後頁面返回。 使用 iOS 7 提供的滑動返回實現,效果為使用者手指從螢幕外由左向右進入螢幕,鬆開後頁面返回。
前兩種實現方式是 iOS 7 推出之前的普遍做法,現在來看,已經過時且體驗不佳,個人推薦使用第三種,優點如下: 良好的互動與動畫效果 系統級的支援,實現簡單,代碼清晰 不會與一些螢幕內的手勢產生衝突
雖然優點很明顯,但是在使用過程中,還是會有一些值得我們注意的問題,接下來我們就一一解決它們。 1. 如何設定自訂的返回按鈕圖片。
如果我們的返回按鈕不需要顯示文字,或者顯示的文字是固定的,可以做到圖片中去,那麼我推薦通過設定 iOS 7 新引入的 backIndicatorImage 來自訂返回按鈕。代碼如下:
1 2 3 |
UIImage *image = [ UIImage imageNamed : @"nav_back_btn" ] ; [ UINavigationBar appearance ] . backIndicatorImage = image ; [ UINavigationBar appearance ] . backIndicatorTransitionMaskImage = image ; |
這樣設定後會發現圖片被渲染成 navigationBar 的 tintColor 的顏色了,要怎樣才能顯示出原始的圖片顏色呢。還需要用到 iOS 7 中 UIImage 的一個新屬性 renderingMode。 我們需要產生一張 renderingMode 為 UIImageRenderingModeAlwaysOriginal 的圖片,讓我們加上這行代碼:
1 2 3 4 |
UIImage *image = [ UIImage imageNamed : @"nav_back_btn" ] ; image = [ image imageWithRenderingMode :UIImageRenderingModeAlwaysOriginal ] ; [ UINavigationBar appearance ] . backIndicatorImage = image ; [ UINavigationBar appearance ] . backIndicatorTransitionMaskImage = image ; |
這樣我們的圖片就能顯示出原始的顏色了。 2. 使用 UIButton 自訂返回按鈕後,如何使用系統的滑動返回。
當我們的返回按鈕上需要顯示不同的文字時,就不能使用 backIndicatorImage 了,我們要自訂一個 UIButton 來產生 UIBarButtonItem,再設定 navigationBar 的 leftBarButtonItem。而如果設定了 leftBarButtonItem 的話,會使系統的滑動返回失效。我們需要在 UIViewController 中加入這行代碼
1 |
self . navigationController . interactivePopGestureRecognizer . delegate = self ; |
運行起來一看,恩…可以滑動返回了。 3. 怎樣讓滑動返回像預設的效果一樣容易觸發。
玩了一會兒你發現,好像哪裡不對勁,怎麼不如之前容易觸發了。
沒錯,當設定了 navigationController.interactivePopGestureRecognizer.delegate 後,雖然滑動返回恢複了,但是它卻有點“殘疾”,具體表現為兩點: