1. 程式人生 > >iOS手勢篇(三)-UIGestureRecognizer代理詳解

iOS手勢篇(三)-UIGestureRecognizer代理詳解

3.代理

@protocol UIGestureRecognizerDelegate <NSObject>
@optional
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer NS_AVAILABLE_IOS(7_0);
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer NS_AVAILABLE_IOS(7_0);
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivePress:(UIPress *)press;
@end
  1. - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
    手勢識別器是否能夠開始識別手勢.
    當手勢識別器識別到手勢,準備從UIGestureRecognizerStatePossible狀態開始轉換時.呼叫此代理,如果返回YES,那麼就繼續識別,如果返回NO,那麼手勢識別器將會將狀態置為UIGestureRecognizerStateFailed.

  2. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;


    gestureRecognizer : 此物件傳送的代理訊息.
    返回YES允許gestureRecognizer與otherGestureRecognizer同時識別.
    如果返回NO,分兩種情況.1.兩個手勢都返回NO,那麼不會同時識別.如果一個NO,一個YES.可能會同時識別.

  3. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer NS_AVAILABLE_IOS(7_0);


    一般用來重寫該方法.來定義什麼時候手勢識別失敗.如果直接返回YES,那麼gestureRecognizer與otherGestureRecognizer互斥的話gestureRecognizer識別失敗. 可以用tap手勢和longPress手勢試試.

  4. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer NS_AVAILABLE_IOS(7_0);
    和3差不多,注意這個Be,所以是相反的,如果互斥,otherGestureRecognizer識別失敗.

  5. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
    返回手勢識別器是否允許檢查手勢物件.
    UIKit將會在touchesBegan:withEvent:方法之前呼叫這個代理.

  6. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivePress:(UIPress *)press;
    返回手勢識別器是否允許檢查按壓(UIPress物件).
    UIKit將會在touchesBegan:withEvent:方法之前呼叫這個代理.