Swift OC-全屏Pop手势

2018-03-23  本文已影响0人  哈哈西

巧用iOS运行时特性,将原本系统中的左侧侧滑pop事件,添加到view中.源码欢迎star和关注。


全局pop的gif图.gif

1、Swift版本

//在自定义的UINavigationController里面获取到系统侧滑的pop事件,然后将事件添加到view上面
    override func viewDidLoad() {
        super.viewDidLoad()
        //        var count : UInt32 = 0
        //        let ivas = class_copyIvarList(UIGestureRecognizer.self, &count)!
        //        for i in 0..<count {
        //            let nameP = ivar_getName(ivas[Int(i)])!
        //            let name = String.init(cString: nameP)
        //            print(name)
        //        }
        guard  let  targets = interactivePopGestureRecognizer?.value(forKey: "_targets") as? [NSObject] else { return }
        let targetObj = targets[0]
        print(targetObj)
        let target = targetObj.value(forKey: "target")
        let action = Selector(("handleNavigationTransition:"))
        let panGes = UIPanGestureRecognizer.init(target: target , action:action)
        view.addGestureRecognizer(panGes)
    }

2、OC版本


- (void)viewDidLoad {
    [super viewDidLoad];

    UInt32 count = 0;
    Ivar *ivars = class_copyIvarList(NSClassFromString(@"UIGestureRecognizer"), &count);
    for (int i = 0; i < count; i++){
        Ivar ivar = ivars[i];
        const char *ivarName = ivar_getName(ivar);
        NSString *ivarNameCode = [NSString stringWithUTF8String:ivarName];
        NSLog(@"%@",ivarNameCode);
    }
    free(ivars);

    NSArray *targets = [self.interactivePopGestureRecognizer valueForKey:@"_targets"];
    NSLog(@"%@",targets[0]);
    SEL sel = NSSelectorFromString(@"handleNavigationTransition:");
    UIPanGestureRecognizer *panGes = [[UIPanGestureRecognizer alloc] initWithTarget:[targets[0] valueForKey:@"target"] action:sel];
    [self.view addGestureRecognizer:panGes];

}


上一篇下一篇

猜你喜欢

热点阅读