ios - UISwipeGestureRecognizers 不会被同时识别

标签 ios objective-c sprite-kit uiswipegesturerecognizer

在我的 spritekit 游戏中,我试图使 2 个 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;
}

最佳答案

您从未分配 UISwipeGestureRecognizersdelegate 属性,因此您的委托(delegate)方法永远不会被调用。

您只需执行以下操作即可解决此问题:

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 协议(protocol):

@interface YourViewController <UIGestureRecognizerDelegate>

...

@end

关于ios - UISwipeGestureRecognizers 不会被同时识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384193/

相关文章:

ios - 强制应用程序在进入后台时始终采用相同的形式

ios - 对 SKSpriteNode 进行扩展

ios - 从 SKScene 中解雇 MFMailComposeViewController

ios - 以编程方式在 Twitter 上发布视频

iphone - Objective C 中的转发类和协议(protocol)

ios - 如何在 SpriteKit 中检测不同类型的碰撞

iphone - 无法下载应用程序,此时无法安装 <app-name>

iphone - iOs (cocos2d) 屏幕截图缓存或 CCRenderTexture 缓冲区?它没有改变

ios - 如何强制 UILabel 绘制带有大写字符的文本?

ios - 黑框、缺失或缩放图像