iOS 如何在整个屏幕中都能实现滑动返回的效果

 1 - (void)setupGetsInNav
 2 {
 3     UIGestureRecognizer *gesture = self.interactivePopGestureRecognizer;
 4     gesture.enabled = NO;
 5     UIView *gestureView = gesture.view;
 6     
 7     UIPanGestureRecognizer *popRecognizer = [[UIPanGestureRecognizer alloc] init];
 8     popRecognizer.delegate = self;
 9     popRecognizer.maximumNumberOfTouches = 1;
10     [gestureView addGestureRecognizer:popRecognizer];
11     /**
12      *  获取系统手势的target数组
13      */
14     NSMutableArray *_targets = [gesture valueForKey:@"_targets"];
15     /**
16      *  获取它的唯一对象,我们知道它是一个叫UIGestureRecognizerTarget的私有类,它有一个属性叫_target
17      */
18     id gestureRecognizerTarget = [_targets firstObject];
19     /**
20      *  获取_target:_UINavigationInteractiveTransition,它有一个方法叫handleNavigationTransition:
21      */
22     id navigationInteractiveTransition = [gestureRecognizerTarget valueForKey:@"_target"];
23     /**
24      *  通过前面的打印,我们从控制台获取出来它的方法签名。
25      */
26     SEL handleTransition = NSSelectorFromString(@"handleNavigationTransition:");
27     /**
28      *  创建一个与系统一模一样的手势,我们只把它的类改为UIPanGestureRecognizer
29      */
30     [popRecognizer addTarget:navigationInteractiveTransition action:handleTransition];
31 
32 }
1 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
2     /**
3      *  这里有两个条件不允许手势执行,1、当前控制器为根控制器;2、如果这个push、pop动画正在执行(私有属性)
4      */
5     return self.viewControllers.count != 1 && ![[self valueForKey:@"_isTransitioning"] boolValue];
6 }

只需要在全局的导航控制器中添加上边代码即可

posted @ 2015-08-30 13:36  马在路上  阅读(955)  评论(0编辑  收藏  举报