SKView gestureRecognizer [UITapRecognizer name]:发送到实例的无法识别的选


-(void)didMoveToView:(SKView *)view
{
    UITapGestureRecognizer* doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleTap:)];
    doubleTapGestureRecognizer.numberOfTapsRequired = 2;
    [self.view addGestureRecognizer:doubleTapGestureRecognizer];
}
-(void)doubleTap:(id)sender
{
    NSLog(@"double tap");
}

我正在使用它向我的 SKView 添加一个手势识别器。它工作正常,双击时会调用两次,但是当我触摸屏幕并移动手指时,应用程序崩溃并显示此错误:

[UITapRecognizer name]: unrecognized selector sent to instance 0x1756c600

为什么会这样?我没有在此识别器上调用任何"名称"选择器。

我有这个方法:

#pragma mark - SKPhysicsContactDelegate
-(void)didBeginContact:(SKPhysicsContact *)contact
{
    if(![contact.bodyA.node.name isEqualToString:@"player"])
    {
        [contact.bodyA.node performSelector:@selector(removeFromParent) withObject:nil afterDelay:1];
    }
    if(![contact.bodyB.node.name isEqualToString:@"player"])
    {
        [contact.bodyB.node performSelector:@selector(removeFromParent) withObject:nil afterDelay:1];
    }
}

注意到如果我注释掉这个,就没有这样的错误,但后来我用这个替换了它:

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    if(![contact.bodyA.node respondsToSelector:@selector(name)])
    {
        NSLog(@"%@ , %@ n",contact.bodyA, contact.bodyA.node);
    }
    if(![contact.bodyB.node respondsToSelector:@selector(name)])
    {
        NSLog(@"%@ , %@",contact.bodyB, contact.bodyB.node);
    }
}

调试日志中没有任何内容,只有相同的错误。这是怎么回事?

原来是 -> UITapGestureRecognizer 导致应用程序崩溃

的副本

"我在我的一个SpriteKit游戏中遇到了同样的问题,它是在场景之间的过渡期间使用手势引起的,我通过在过渡前将gestureRecognizer.enable属性(文档(设置为NO来解决它。这个答案有所帮助

最新更新