美文网首页声网sdk
Swift、OC-全屏侧滑返回

Swift、OC-全屏侧滑返回

作者: Mory | 来源:发表于2017-07-04 08:37 被阅读147次
  • 刚开始学习 swift 一段时间,学习果然还是还是要不停地敲代码的啊,全部代码都写在导航控制器 UINavigationController 的类里面。先说下 swift 的整个控制器的侧滑返回实现
  • swift
  • 1,第一种实现方法
//        获取手势属性
        /*
        var count : UInt32 = 0
        let ivars = class_copyIvarList(UIGestureRecognizer.self, &count)!
        
        for i in 0..<count {
            let nameP = ivar_getName(ivars[Int(i)])!
            let name = String(cString: nameP)
            print(name)//打印出所有属性
        }
       free(ivars);
        */
//判断并获取 targets 的 action
       guard let targets = interactivePopGestureRecognizer!.value(forKey: "_targets") as? [NSObject] else{return}
        
        let targetObjc = targets[0]
        
        let target = targetObjc.value(forKey: "target")
//由于直接使用它的 action 会崩溃,所以自己需要重新构建一个 Selector,自定义一个手势
        let action = Selector(("handleNavigationTransition:"))
        
        let panGes = UIPanGestureRecognizer(target: target, action: action)
        
        view.addGestureRecognizer(panGes)
  • 2,第二种实现方法
 interactivePopGestureRecognizer!.delegate = self as? UIGestureRecognizerDelegate
 object_setClass(interactivePopGestureRecognizer!.self, UIPanGestureRecognizer.classForCoder())
  • OC 实现侧滑(实现其实和 swift 差不多)
  • 1,第一种实现方法
    unsigned int count = 0;
    Ivar *ivars = class_copyIvarList([UIGestureRecognizer class], &count);
    //获取手势的属性变量
    for (int i = 0; i<count; i++) {
        
        NSString *str = [NSString stringWithCString:ivar_getName(ivars[(int)i]) encoding:NSUTF8StringEncoding];
        
        NSLog(@"%@",str);
    }    
    free(ivars);
    id targets = [self.interactivePopGestureRecognizer  valueForKey:@"_targets"];
    
    NSLog(@"%@",targets);
    id target = [targets[0] valueForKey:@"target"];
    //更具 target 获取 selector
    SEL selector = NSSelectorFromString(@"handleNavigationTransition:");
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:selector];
    [self.view addGestureRecognizer:pan];
  • 2,第二种实现方法
    // 更换interactivePopGestureRecognizer的delegate为navigationController自己
    self.interactivePopGestureRecognizer.delegate = self;
    // 自带的边缘返回手势UIScreenEdgePanGestureRecognizer,但只负责edge部分。换成全屏的UIPanGestureRecognizer
    object_setClass(self.interactivePopGestureRecognizer, [UIPanGestureRecognizer class]);

相关文章

  • Swift、OC-全屏侧滑返回

    刚开始学习 swift 一段时间,学习果然还是还是要不停地敲代码的啊,全部代码都写在导航控制器 UINavigat...

  • Swift一款丝滑的侧滑返回

    SwiftFullScreenPop - 基于Swift3.0实现全屏侧滑返回 Features 解决自定义nav...

  • 全屏侧滑返回

    手势lazy var pag: UIPanGestureRecognizer = { let target ...

  • 0行代码搞定全屏侧滑返回

    0行代码搞定全屏侧滑返回 前段时间想弄全屏侧滑返回效果,此效果可能还是比较常用,最后在Github上看到FDFul...

  • iOS全屏侧滑返回

    1、使用FDFulleFDFullscreenPopGesture 导入项目即可 2、自定义返回手势取代系统侧滑返...

  • iOS 侧滑返回

    iOS 侧滑返回 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 这种手势主流App...

  • iOS 侧滑返回详解

    iOS 侧滑返回详解 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 这种手势主流A...

  • iOS 侧滑返回详解

    iOS 侧滑返回 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 这种手势主流App...

  • Swift实现全屏侧滑

    之前看到别人用OC实现了全屏侧滑,感觉挺实用的,今天用swift实现了一下具体如下:1.在AppDelegate中...

  • iOS 实现Navigation导航控制器全屏侧滑返回效果并监听

    关于全屏侧滑的效果可以参考《8行代码教你搞定导航控制器全屏滑动返回效果》上面说的很详细,我实现的监听侧滑偏移量就是...

网友评论

    本文标题:Swift、OC-全屏侧滑返回

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