美文网首页
iOS全屏手势返回

iOS全屏手势返回

作者: oldDevil | 来源:发表于2019-01-20 23:38 被阅读11次

    创建一个UINavigationViewController的子类,在子类viewDidLoad方法中写入下面代码,在使用导航控制器的时候使用这个子类就可以了。

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        UIGestureRecognizer *sysges = self.interactivePopGestureRecognizer;
        sysges.enabled = NO;
        UIView *sysView = sysges.view;
        
        id target = [[sysges valueForKey:@"_targets"] firstObject];
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]init];
        SEL action = NSSelectorFromString(@"handleNavigationTransition:");
        [pan addTarget:[target valueForKey:@"_target"] action:action];
        [sysView addGestureRecognizer:pan];
    }
    

    原理就是拿到系统的返回手势,拿到系统手势作用的View,用runtime找到我们想要的targetaction,然后自定义一个pan手势,把系统的target和action填进去就ok了。
    至于为什么我们拿到系统的东西重新弄个手势就可以全屏了,就是因为系统的手势修改了手势的作用范围。


    找target和action如下:

        unsigned int count;
        Ivar *ivar = class_copyIvarList([UIGestureRecognizer class], &count);
        for (int i = 0; i < count; i++) {
           NSLog(@"%s", ivar_getName(ivar[i]));
        }
    

    相关文章

      网友评论

          本文标题:iOS全屏手势返回

          本文链接:https://www.haomeiwen.com/subject/jjxqjqtx.html