ios – UIPanGestureRecognizer在SKScene

前端之家收集整理的这篇文章主要介绍了ios – UIPanGestureRecognizer在SKScene前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在使用UIGestureRecognizers和SpriteKit中的新SKScene / SKNode.我遇到了一个问题,我已经接近修复了,但是我对此感到困惑.本质上,我有一个平移手势识别器,允许用户拖动一个精灵在屏幕上.

我遇到的一个问题是,需要一个轻点实际初始化泛手势,然后只有在其上的第二个点击它正常工作.我在想,这是因为我的pan手势是在touchesBegan中初始化的.但是,我不知道在SKScene的initWithSize方法中初始化之后将其放在哪里,从而阻止手势识别器实际工作.这是我的代码

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    if (!self.pan) {

        self.pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(dragPlayer:)];
        self.pan.minimumNumberOfTouches = 1;
        self.pan.delegate = self;
        [self.view addGestureRecognizer:self.pan];
    }
}

-(void)dragPlayer: (UIPanGestureRecognizer *)gesture {

        CGPoint trans = [gesture translationInView:self.view];

        SKAction *moveAction =  [SKAction moveByX:trans.x y:-trans.y  duration:0];
        [self.player runAction:move];

        [gesture setTranslation:CGPointMake(0,0) inView:self.view];
    }

解决方法

这是因为您在触摸中添加了手势开始,所以手势至少在屏幕被轻拍一次之前不存在.此外,我将验证您实际使用的是initWithSize:作为初始化程序,因为在这里添加手势时不应该有任何问题.

另一个选择是移动代码以将手势添加到 – 在显示场景后立即调用的[SKScene didMovetoView:].更多信息in the docs.

- (void)didMoveToView:(SKView *)view
{
    [super didMoveToView:view];
    // add gesture here!
}

猜你在找的iOS相关文章