iOS实现全屏pop手势

实现全局的pop手势

需要先获取系统手势交互对应interactivePopGestureRecognizer,获取到对应的手势的view
interactivePopGestureRecognizer->UIView->创建新的手势添加到这个UIView上去
这个是利用运行时获取到对应的"_targets",进行了手势重定义。

var outCount : UInt32 = 0
let ivars = class_copyIvarList(UIGestureRecognizer.self, &outCount)!
for i in 0..<outCount {
let ivar : Ivar = ivars[Int(i)]
let name = ivar_getName(ivar)
print(String(cString: name!))
}
ObjC
UIGestureRecognizer *sysGes = nil;
UIView *sysView = nil;
if (self.interactivePopGestureRecognizer) {
sysGes = self.interactivePopGestureRecognizer;
} else return;
if (sysGes.view) {
sysView = sysGes.view;
} else return;

NSDictionary *targetDic = [[sysGes valueForKey:@"_targets"] firstObject];
id target = nil;
SEL sel = nil;
if (targetDic) {
target = [targetDic valueForKey:@"target"];
sel = NSSelectorFromString(@"handleNavigationTransition:");
}else return;
//
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:sel];
[sysView addGestureRecognizer:pan];
Swift
guard let sysGes = interactivePopGestureRecognizer else {return}
guard let popView = sysGes.view else {return}
let targets = sysGes.value(forKey: "_targets") as? [NSObject]
guard let targetDic = targets?.first else {return}
//取出target
guard let target = targetDic.value(forKey: "target") else {return}
let action = Selector(("handleNavigationTransition:"))
//创建自己的pop
let panGes = UIPanGestureRecognizer()
panGes.addTarget(target, action: action)
popView.addGestureRecognizer(panGes)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,206评论 4 61
  • 周一的清晨总是那么匆忙。 听到闹钟后,上一秒还在睡梦中下一秒就立刻换好衣服起床,心里默念这次可不要再迟到。以最快...
    尤咪阅读 9,598评论 0 0
  • 今天早早起床,自己收拾房间里的玩具,归拢整齐,也好好吃早餐,表现不错,上午我们一起去看了一步有意义的电影,睿很认真...
    free_aa2a阅读 825评论 0 0
  • 1 我姑婆是三乡五里的名人,这个名是儿媳不孝成就的。 不孝到什么程度,过门至今儿媳从未和婆婆来往过,甚至严防丈夫、...
    东篱澄子阅读 3,561评论 0 2
  • 你的儿女,其实不是你的儿女。 他们是生命对于自身渴望而诞生的孩子。 他们借助你来到这世界,却非因你而来, 他们在你...
    17grow阅读 2,755评论 0 1