iOS 手势
1、UIGestureRecognizer介紹
手勢識別在iOS上非常重要,手勢操作移動設備的重要特征,極大的增加了移動設備使用便捷性。iOS系統在3.2以后,為方便開發這使用一些常用的手勢,提供了UIGestureRecognizer類。手勢識別UIGestureRecognizer類是個抽象類,下面的子類是具體的手勢,開發這可以直接使用這些手勢識別。
- UITapGestureRecognizer? ? ? ? ? ? ? ? ? ? 點擊
- UIPinchGestureRecognizer? ? ? ? ? ? ? ? 縮放
- UIRotationGestureRecognizer? ? ? ? ? 旋轉
- UISwipeGestureRecognizer? ? ? ? ? ? ? ? 滑動
- UIPanGestureRecognizer? ? ? ? ? ? ? ? ? ? 拖拽
- UILongPressGestureRecognizer? ? ? ? 長按
手勢可以分為“事件手勢”與“狀態手勢”, 例如TapGesture指的點擊的時候響應,是瞬間動作, 而panGesture指的拖拽, 只要狀態是檢測到是拖拽狀態,都會響應回調方法。
UIGestureRecognizer的繼承關系如下:
Gesture的狀態
gesture.state :
- UIGestureRecognizerStateBegan
- UIGestureRecognizerStateChanged
- UIGestureRecognizerStateEnded
- UIGestureRecognizerStateCancelled
- UIGestureRecognizerStateFailed
常用:
swipeGesture的滑動方向值 swipGesture.direction ==
- UISwipeGestureRecognizerDirectionRight
- UISwipeGestureRecognizerDirectionLeft
- UISwipeGestureRecognizerDirectionUp
- UISwipeGestureRecognizerDirectionDown
CGPoint velocity = [sender velocityInView:sender.view];//獲取拖拽的X,Y方向速度CGFloat speedX = velocity.x;CGFloat speedY = velocity.y;
同時觸發兩個view的手勢
手勢之間是互斥的,如果你想同時觸發兩個view,那么需要實現協議 --?UIGestureRecognizerDelegate 并將以下方法返回設置為YES -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; }//別忘了設置代理 panGestureRecognizer.delegate = self; pinchGestureRecognizer.delegate = self; rotateRecognizer.delegate = self;手勢依賴
<span style="font-size:14px;">[tapRecognizer requireGestureRecognizerToFail:panGestureRecognizer]; </span>上面的意思是, 當如果pan手勢失敗,就是沒發生拖動,才會出發tap手勢。
總結
- 上一篇: 周五跟大佬喝酒,顺便打了个球
- 下一篇: 解剖8051内核如何进行多任务切换