我一直覺得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
近期會支援,請稍候。