iOS開發: 導航控制器 - 全屏右滑pop返回效果

  • iOS開發中, 導航控制器的pop返回可以通過點擊<a>返回按鈕</a> 和 <a>左側邊緣右滑</a>實現

  • 我們還可以自定義導航控制器, 實現全屏右滑pop返回的效果

  • 效果如下圖:


    全屏左劃pop返回效果
  • 實現思路:

    • 自定義導航控制器
    • 獲取導航控制器pop返回的手勢
    • 自定義平移手勢(UIPanGestureRecognizer)
    • 平移手勢調用<a>pop返回手勢代理</a>的<a>handleNavigationTransition:</a>方法
    • 將平移手勢添加到 pop返回手勢的主視圖上(就是控制器的容器視圖)
    • 設置pop返回的手勢的<a>delaysTouchesBegan</a>屬性為YES
  • .h文件

#import <UIKit/UIKit.h>

@interface LTNavigationViewController : UINavigationController

@end

  • .m文件代碼
#import "LTNavigationViewController.h"

@interface LTNavigationViewController () <UIGestureRecognizerDelegate>

@end

@implementation LTNavigationViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIGestureRecognizer *gester = self.interactivePopGestureRecognizer;
    
    // 自定義手勢
    // 手勢加載誰身上, 手勢執行誰的方法
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:gester.delegate action:NSSelectorFromString(@"handleNavigationTransition:")];
    // 其實就是控制器的容器視圖
    [gester.view addGestureRecognizer:pan];
    
    gester.delaysTouchesBegan = YES;
    pan.delegate = self;
}

#pragma mark - < UIGestureRecognizerDelegate >

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    // 防止根視圖控制器被pop, 導致程序假死
    return self.childViewControllers.count > 1;
}

@end
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容