UIGestureRecognizeride
1.是什麼?ui
專門用來處理手勢識別的類.spa
2.有什麼用?代理
這是一個抽象類.經過其具體子類能夠處理手勢識別,code
具體子類.orm
UITapGestureRecognizer//輕拍
UIPinchGestureRecognizer//縮放
UIRotationGestureRecognizer//旋轉
UISwipeGestureRecognizer//輕掃
UIPanGestureRecognizer//拖拽
UIScreenEdgePanGestureRecognizer//輕拍屏幕邊緣
UILongPressGestureRecognizer//長按
3.怎麼用?對象
>1.建立.blog
>2.添加給須要進行手勢識別的視圖:addGestureRecognizer繼承
>3.添加識別後處理的方法ip
例.
實現代碼:
UIRotationGestureRecognizer *rotatetion = [[UIRotationGestureRecognizer alloc]init];
[self.pinkView addGestureRecognizer:rotatetion];
[rotatetion addTarget:self action:@selector(rotationPinkView:)];
- (void)rotationPinkView:(UIRotationGestureRecognizer *)rotation { self.pinkView.transform = CGAffineTransformMakeRotation(rotation.rotation); }
其餘的幾個手勢處理的類的用法格式上是一致的,此處不贅述.
4.UIGestureRecognizer的代理方法.
>1.同時識別多個手勢操做.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
說是同時,可是單位時間仍是隻能處理一個手勢,只不過只要此處返回YES,好比一邊旋轉一邊縮放,旋轉完成後,鬆手,縮放一樣有效.
>2.是否容許接收觸摸對象,就是是否容許視圖對手勢作出反應.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
返回NO,不識別手勢操做.
5.注意:
>1.有一個須要注意的地方:當使用旋轉的時候,若是用rotate,將當前的transform傳遞進去,會越轉越快.由於roation屬性是旋轉角度,好比第一次旋轉10度,被旋轉視圖停留在10度的位置,再次旋轉,若是在當前基礎上旋轉10度,也就是至關於初始位置旋轉了20度,就是說,調用對應的手勢識別方法時,會在10度的基礎上再次旋轉20度,也就是說你手指雖然旋轉了20度,可是被旋轉視圖實際上旋轉了30度.
6.何時用?
UIResponder的touch系列方法也能夠處理屏幕的手勢,touches系列方法由UIResponder提供,只有繼承自UIResponder的類才識別手勢,UIView繼承自UIResponder,全部的UI控件都繼承自UIView,於是全部的控件都具備touches系列方法.
可是有一個致命弱點,touches系列方法只能監聽觸摸對象在視圖上的位置,而沒法識別觸摸的狀態-----輕重緩急,從左到右等方向,等等手勢操做,UIGestureRecognizer恰好能夠彌補這一點.所以,須要識別手勢的狀態是可使用UIGestureRecognizer來處理.