UIGestureRecognizer

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來處理.

相關文章
相關標籤/搜索