我一直觉得iOS中的UIGesture使用起来非常别扭,在github上搜了一圈也没有顺手的,于是我就自己撸了一个:NiceGesture。
使用
TapGesture:
因为tap手势只有一种状态,所以这个手势的处理只需要调用whenTapped
方法:
1 2 3 |
view.nc_whenTapped {(tapGestureRecognizer) -> () in //doSomething() } |
如果你需要配置tapGestureRecognizer,就先调用nc_addTapGestureWithConfigClosure
方法,在这个参数闭包里配置,接着继续调用whenTapped
方法:
1 2 3 4 5 6 |
view.nc_addTapGestureWithConfigClosure { (tapGestureRecognizer) -> () in // Configure gesture recognizer,like this: tapGestureRecognizer.numberOfTapsRequired=2 }.whenTapped {(tapGestureRecognizer) -> () in //doSomething() } |
其他手势:
如果你需要配置这些手势,如上面tap的处理方法,调用nc_addxxxxGestureWithConfigClosure
方法:
1 2 3 |
view.nc_addxxxxGestureWithConfigClosure({ (gestureRecognizer) -> () in //Configure gesture recognizer }) |
如果不需要配置,直接调用add方法就可以:
1 |
view.nc_addxxxxGesture() |
接着,重点来了,在添加完手势后,支持链式编程,可以连续处理几种不同的状态,避免了代码嵌套的问题,代码看起来也会更整洁。
1 2 3 4 5 6 7 8 9 10 11 12 |
view.nc_addPanGesture() .whenBegan { (gestureRecognizer) -> Void in }.whenCancelled { (gestureRecognizer) -> Void in }.whenChanged { (gestureRecognizer) -> Void in }.whenEnded { (gestureRecognizer) -> Void in }.whenFailed { (gestureRecognizer) -> Void in } |
好吧,有的时候你会想用一个闭包同时处理几种状态,那么你就使用 whenStatesHappend
方法,参数是一个手势识别state的数组:
1 2 3 |
lbState.nc_addPanGesture().whenStatesHappend([.Ended,.Changed]) { (gestureRecognizer) -> Void in } |
安装
支持pod
在pod file中输入以下:
1 2 3 4 |
platform :ios, '8.0' use_frameworks! pod 'NiceGesture' |
Carthage
近期会支持,请稍候。