创建一个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
找到我们想要的target
和action
,然后自定义一个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]));
}
网友评论