Objective-C学习手册iOS开发交流

对导航控制器的2种滑动返回功能的补充

2016-05-15  本文已影响89人  小小小阿博er
实现该功能前我们需要思考的问题

1)系统自带的滑动返回功能已经默认实现了,那么我们能不能直接把系统的这个返回功能拿过来为我们所用呢?
2)这个功能属于手势的一个功能,平时我们自己定义手势需要通过给手势进行设置一个target,在手势改变的时候进行相应的action处理,那么系统内部是否也是通过这样实现的呢?

1)和2)2个步骤在viewDidLoad 方法完成即可
1)// 防止手势冲突,先把系统的手势给关闭了,用我们自己的
   self.interactivePopGestureRecognizer.enabled = NO;
2)// 取出系统手势的target对象,前提是我们已经知道了它的名字就是@“_targets”
    NSArray *targets = [self.interactivePopGestureRecognizer valueForKeyPath:@"_targets"];
    id objc = [targets firstObject];
    id target = [objc valueForKeyPath:@"_target"];

   //我们自己创建一个手势, 
   //情况一
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget: target action:@selector(handleNavigationTransition:)];
   //情况二
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
    //让导航控制器成为我们自定义手势的代理,实现下面的代理方法
    //这个时候需要让当前控制器遵守<UIGestureRecognizerDelegate>
    pan.delegate = self;
    //添加手势
    [self.view addGestureRecognizer:pan];


#pragma mark - 手势代理方法
// 是否开始触发手势
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    // 判断当前控制器是否是根控制器,是的话不要触发手势
    return (self.topViewController != [self.viewControllers firstObject]);
}

上一篇下一篇

猜你喜欢

热点阅读