iOS - 同一個View識別單擊和雙擊手勢

需求:在同一個cell上響應單擊和雙擊方法,分別進入不同方法。
在視圖上同時識別單擊手勢和雙擊手勢的問題在於,當檢測到一個單擊操作時,無法確定是確實是一個單擊操作或者只是雙擊操作中的第一次點擊。解決這個問題的方法就是:在檢測到單擊時,需要等一段時間等待第二次點擊,如果沒有第二次點擊,則爲單擊操作;如果有第二次點擊,則爲雙擊操作。
檢測手勢有兩種方法,一種是定製子視圖,重寫視圖從UIResponder類中繼承來的事件處理方法,touchesBegan:withEvent:等一系列方法來檢測手勢;另一個方法是使用手勢識別器,即UIGestureRecognize的各種具體子類。


//在cell上添加 bgView,給bgView添加兩個手勢檢測方法     
bgView.userInteractionEnabled = YES;
UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];
singleTapGesture.numberOfTapsRequired =1;
singleTapGesture.numberOfTouchesRequired  =1;
[bgView addGestureRecognizer:singleTapGesture];
           
UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapGesture.numberOfTapsRequired =2;
doubleTapGesture.numberOfTouchesRequired =1;
[bgView addGestureRecognizer:doubleTapGesture];
//只有當doubleTapGesture識別失敗的時候(即識別出這不是雙擊操作),singleTapGesture才能開始識別          
[singleTapGesture requireGestureRecognizerToFail:doubleTapGesture];

//兩個手勢分別響應的方法
-(void)handleSingleTap:(UIGestureRecognizer *)sender{
//chooseNum爲手勢響應的view的tag值
   chooseNum=(int)sender.view.tag;
   CGPoint touchPoint = [sender locationInView:self];
}

-(void)handleDoubleTap:(UIGestureRecognizer *)sender{
//chooseNum爲手勢響應的cell的tag值
   chooseNum=(int)sender.view.tag;
   UITableViewCell *v = (UITableViewCell *)[[sender view] superview];
   chooseNum=v.tag;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章