Swift 简单封装UISwipeGestureRecognizer + 闭包回调监听事件,便于不同场景的 UIView调用

typealias sendValueClosure = (swipeGesture: UISwipeGestureRecognizer) -> Void</span>
class SwipeGesture:NSObject {
    
    //声明一个闭包
    var myClosure: sendValueClosure?
    //下面的方法需要传入上个界面的someFunctionThatAClosure函数指针
    func initWithClosure(closuer: sendValueClosure?) {
        //讲函数指针赋值给myClosure闭包,该闭包中覆盖了someFunctionThatTakesAClosure函数中的局部变量等引用
        self.myClosure = closuer
    }
    
    
    func setSwipeGesture(view:UIView){
        //设置手势
        let swipeRight = UISwipeGestureRecognizer(target: self, action: "respondToSwipeGesture:")
        swipeRight.direction = UISwipeGestureRecognizerDirection.Right
        view.addGestureRecognizer(swipeRight)
        
        let swipeLeft = UISwipeGestureRecognizer(target: self, action: "respondToSwipeGesture:")
        swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
        view.addGestureRecognizer(swipeLeft)
        
        let swipeUp = UISwipeGestureRecognizer(target: self, action: "respondToSwipeGesture:")
        swipeUp.direction = UISwipeGestureRecognizerDirection.Up
        view.addGestureRecognizer(swipeUp)
        
        let swipeDown = UISwipeGestureRecognizer(target: self, action: "respondToSwipeGesture:")
        swipeDown.direction = UISwipeGestureRecognizerDirection.Down
        view.addGestureRecognizer(swipeDown)
    }
    
    //事件
    func respondToSwipeGesture(gesture: UIGestureRecognizer){
        
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            
           if let closure = self.myClosure {
                closure(swipeGesture: swipeGesture)
            }
            
        }
    }
}
这个类功能就是封装UISwipeGestureRecognizer,添加上下左右4种滑动手势及相应的时间,这些都不重要,重要的是:
    //声明一个闭包
    var myClosure: sendValueClosure?
    //下面的方法需要传入上个界面的someFunctionThatAClosure函数指针
    func initWithClosure(closuer: sendValueClosure?) {
        //讲函数指针赋值给myClosure闭包,该闭包中覆盖了someFunctionThatTakesAClosure函数中的局部变量等引用
        self.myClosure = closuer
    }

声明的闭包myClosure在类的最上面那句代码

typealias sendValueClosure = (swipeGesture: UISwipeGestureRecognizer) -> Void
initWithClosure(closure: sendValueClosure)这个函数是被我们UIView源文件调用的。

下面respondToSwipeGesture(gesture:UIGestureRecognizer)事件触发的时候,里面的

if let closure = self.myClosure {
      closure(swipeGesture: swipeGesture)
}

是把 UISwipeGestureRecognizer 当做参数返回给闭包。

下面就是我们的 UIView 源文件调用啦:

//实例化类
let mySwipeGesture = SwipeGesture()
// 给 UIView 添加手势
mySwipeGesture.setSwipeGesture( yourView)
//调用闭包监听事件
mySwipeGesture.initWithClosure { (swipeGesture) -> Void in
        switch swipeGesture.direction {
        case UISwipeGestureRecognizerDirection.Right:
                print("Swiped right")
        case UISwipeGestureRecognizerDirection.Left:
                print("Swiped left")
        case UISwipeGestureRecognizerDirection.Up:
                print("Swiped up")
        case UISwipeGestureRecognizerDirection.Down: 
	        print("Swiped down")
        default:
                break
        }
}


 
 


 是的,就是这么简单。。手势不是目的,封装不是目的,目的是学会用闭包实现数据监听及传送数据。 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值