網頁

2012年9月13日 星期四

iOS開發筆記-UITapGestureRecognize避開UIButton的方式

最近有個需求如下:

  1. 一個Root View,上頭一個ImageView及兩個縮圖(UIButton實作),按了縮圖後,ImageView會顯示此縮圖的原圖
  2. 點一下畫面,會出現此圖的說明
嗯~基本上不難,直接針對這個View實作touch event也ok,不過我要的是用UITapGestureRecognize,但這會有個問題,針對Root View去加入UITapGestureRecognize後,連同Button的touch event都被劫走了,那時以為除了一個個都實作成class後再加上touch實作才行,說穿了

我的狀況是“在一個複雜的View之中,想在View上直接觸點一下,就能執行我要的效果,但原本在上頭的Button一樣要正常運作

以下就以這個樣一段需求來實作。

Step 1. 加入UITapGestureRecognize,記得要在class加入UIGestureRecognizerDelegate
- (void)viewDidLoad
{
    [super viewDidLoad];

    //加入單點觸發
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapScreenShot:)];
    [self addGestureRecognizer:tapGesture];
    tapGesture.delegate = self;
}

Step 2. 寫好要要觸發的function,這邊單純印出字串
- (void)singleTapScreenShot:(UITapGestureRecognizer *)gestureRecognizer
{
    NSLog(@"Tap In");
}

Step 3. 加入觸發後,辨別UIGestureRecognizer是否要觸發,在這我是return NO,讓Button的touch能被取得
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
   
    if ([touch.view isKindOfClass:[UIButton class]]) {
        return NO;
    }
    return YES;
}


touch.view這邊可以自行改成要比對的object,這樣就可以很容易的實作出來了

沒有留言:

張貼留言