2016-02-13 79 views
0

在我的spritekit遊戲中,我試圖讓它能夠同時識別2個UISwipeGestureRecognizers,但是,我無法這樣做。任何幫助將非常感謝,事先感謝。下面是我的代碼...UISwipeGestureRecognizers不會被同時識別

在viewDidLoad中:

UISwipeGestureRecognizer *leftSwipe1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwiped1:)]; 

[leftSwipe1 setDirection:UISwipeGestureRecognizerDirectionLeft]; 
[leftSwipe1 setNumberOfTouchesRequired:1]; 
[self.view addGestureRecognizer:leftSwipe1]; 

UISwipeGestureRecognizer *rightSwipe1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwiped1:)]; 

[rightSwipe1 setDirection:UISwipeGestureRecognizerDirectionRight]; 
[rightSwipe1 setNumberOfTouchesRequired:1]; 
[self.view addGestureRecognizer:rightSwipe1]; 

後viewDidLoad中:

-(void)rightSwiped1:(UIGestureRecognizer *)gestureRecognizer { 

CGPoint pt = [gestureRecognizer locationInView:self.view]; 
if(pt.x < (self.view.bounds.size.width/2)) 
{ 
    SKNode *person1 = [self childNodeWithName:@"person1"]; 
    SKAction *moveRight = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) - 90, CGRectGetMidY(self.frame) + 200) duration:0.1f]; 
    [person1 runAction:moveRight]; 
} else if (pt.x > (self.view.bounds.size.width/2)) { 

    SKNode *person2 = [self childNodeWithName:@"person2"]; 
    SKAction *moveRight2 = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) + 400, CGRectGetMidY(self.frame) + 200) duration:0.1f]; 
    [person2 runAction:moveRight2]; 
} 


} 
-(void)leftSwiped1:(UIGestureRecognizer *)gestureRecognizer { 
CGPoint pt = [gestureRecognizer locationInView:self.view]; 
if(pt.x < (self.view.bounds.size.width/2)) 
{ 
    SKNode *person1 = [self childNodeWithName:@"person1"]; 
    SKAction *moveLeft = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) - 400, CGRectGetMidY(self.frame) + 200) duration:0.1f]; 
    [person1 runAction:moveLeft]; 
} else if (pt.x > (self.view.bounds.size.width/2)) { 

    SKNode *person2 = [self childNodeWithName:@"person2"]; 
    SKAction *moveLeft2 = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) + 90, CGRectGetMidY(self.frame) + 200) duration:0.1f]; 
    [person2 runAction:moveLeft2]; 
} 
} 
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ 
return YES; 
} 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
return YES; 
} 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 
return YES; 
} 
+0

請告訴我們您的意思是同時。他們永遠不會完全在同一時刻,因爲那些是基於目標操作的識別器,而主UI線程是串行的。所以只會有一個方法立刻開始。 如果您的意思是在識別之間存在顯着的延遲,您應該嘗試@ originaluser2的解決方案,並嘗試使用'cancelsTouchesInView'或'delaysTouchesBegan'屬性 – Alistra

+0

我希望左右滑動操作同時發生if ,我會怎麼做?如果在同一時間在屏幕兩側滑動,我希望指定的動作發生 – d33

回答

1

你永遠不指定您UISwipeGestureRecognizersdelegate財產,因此您的委託方法永遠不會被調用。

你可以簡單地做解決這個問題:

UISwipeGestureRecognizer *leftSwipe1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwiped1:)]; 

leftSwipe1.delegate = self; 
[leftSwipe1 setDirection:UISwipeGestureRecognizerDirectionLeft]; 
[leftSwipe1 setNumberOfTouchesRequired:1]; 
[self.view addGestureRecognizer:leftSwipe1]; 

UISwipeGestureRecognizer *rightSwipe1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwiped1:)]; 

rightSwipe1.delegate = self; 
[rightSwipe1 setDirection:UISwipeGestureRecognizerDirectionRight]; 
[rightSwipe1 setNumberOfTouchesRequired:1]; 
[self.view addGestureRecognizer:rightSwipe1]; 

確保您也符合UIGestureRecognizerDelegate協議:

@interface YourViewController <UIGestureRecognizerDelegate> 

... 

@end 
+0

感謝您的幫助,但由於某些原因,兩個手勢仍然不能同時識別,我不知道我是什麼做錯了 – d33