2012-10-15 30 views
3

我需要在用戶開始觸摸屏幕,移動手指然後結束觸摸時執行一些操作。觸摸開始正常工作,也可以移動,但觸摸結束時間在0.5-1秒之間。下面有一個代碼:使用UIGestureRecognizerStateEnded產生不必要的延遲

-(id) init {  
    if (self = [super init]) { 
     //Adding a listener for catching touch events and get call back to selector method 
     [self addGestureListener:@selector(gestureCallback:)]; 

     CCScene *scene = [CCScene node]; 

     [scene addChild: self]; 

     [[CCDirector sharedDirector] runWithScene:scene]; 
    } 
    return self; 
} 

- (UIPanGestureRecognizer *)addGestureListener:(SEL)selector { 
    UIPanGestureRecognizer *recognizer = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:selector] autorelease]; 
    [[[CCDirector sharedDirector] openGLView] addGestureRecognizer:recognizer]; 
    return recognizer; 
} 

-(void) gestureCallback:(UIPanGestureRecognizer *) recognizer { 

    if (recognizer.state == UIGestureRecognizerStateBegan) { 
     NSLog(@"start"); 
    } else if (recognizer.state == UIGestureRecognizerStateChanged) { 
     NSLog(@"moved"); 
    } else if (recognizer.state == UIGestureRecognizerStateEnded) { 
     NSLog(@"ended"); 
    } 
} 

在日誌(最後2行)我看到這一點:

2012-10-15 11:29:03.609 App[6169:c07] moved 
2012-10-15 11:29:04.267 App[6169:c07] ended 

任何想法?

+0

注意到這種問題只發生在觸摸板上使用3個手指進行拖放時發生。當它只是一個手指(另一種拖放方式)時,它可以正常工作。很奇怪。 –

+0

您是否找到解決方案?也有它 – Ixx

+0

它也適用,如果你做一個短暫的暫停移動,然後舉手指。然後你立即結束狀態。否則會有延遲,就像它正在處理最後的移動一樣 - 或者不知道。 – Ixx

回答

1

看看GestureRecognizer的delaysTouchesEnded propery。來自Apple的文檔:

當此屬性的值爲YES(默認值)並且接收方正在分析觸摸事件時,窗口會將UITouchPhaseEnded階段中的觸摸對象的傳送暫掛到附加視圖。如果手勢識別器隨後識別其手勢,則取消這些觸摸對象(通過touchesCancelled:withEvent:消息)。如果手勢識別器無法識別其手勢,則窗口在調用視圖的touchesEnded:withEvent:方法時傳遞這些對象。將此屬性設置爲NO,以便在手勢識別器正在分析相同的觸摸時將UITouchPhaseEnded中的觸摸對象傳送到視圖。