2013-12-12 30 views
2

嗯,我有一些代碼,以4個識別器添加到視圖,這樣UISwipeGestureRecognizer對角線輕掃問題

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib 
    for(int d = UISwipeGestureRecognizerDirectionRight; d <= UISwipeGestureRecognizerDirectionDown; d = d*2) { 
     UISwipeGestureRecognizer *sgr = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
     sgr.direction = d; 
    [self.view addGestureRecognizer:sgr]; 
    } 
    [self restore]; 
    [self populate]; 
    [self displaymap]; 

}

像這樣

-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer 
{ 
printf("Guesture: %d\n", recognizer.direction); 
if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) 
{ 
    printf("a\n"); 
    [self move: 'a']; 
} 
else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) 
{ 
    printf("d\n"); 
    [self move: 'd']; 
} 
else if (recognizer.direction == UISwipeGestureRecognizerDirectionUp) 
{ 
    printf("w\n"); 
    [self move: 'w']; 
} 
else if (recognizer.direction == UISwipeGestureRecognizerDirectionDown) 
{ 
    printf("s\n"); 
    [self move: 's']; 
} 
else if (recognizer.direction == (UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionUp)) 
{ 
    printf("y\n"); 
    [self move: 'd']; 
} 
} 

的問題是識別,它永遠不會檢測到up |正確的方向,任何人都知道解決這個問題的方法?

回答

4

這不是direction屬性的工作原理。 UISwipeGestureRecognizer一次只能在一個方向上識別滑動。您需要做一些更復雜的事情,包括UIPanGestureRecognizer,並根據其方法的結果確定其方向。

+0

我用編程方式添加識別器有點不好,你認爲你能讓我開始嗎? – phyrrus9

+0

好吧,我得到了一個功能,我應該分割translationInView和velocityInView或/用作「使用這個或那個」? – phyrrus9

+0

「使用這個或那個」。 '-velocityInView:'可能是更好的選擇 - 只要其幅度超過某個閾值,您就可以按該矢量描述的方向觸發手勢。 –