我一直在试验UIGestureRecognizers
以及SKScene/SKNode's
中的新SpriteKit
。我有一个问题,我接近修复它但我对一件事感到困惑。基本上,我有一个平移手势识别器,允许用户在屏幕上拖动精灵。
我遇到的唯一问题是实际初始化平移手势只需要一次点击,然后只有在SECOND上点击才能正常工作。我想这是因为我的平移手势在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];
}
答案 0 :(得分:11)
那是因为你在触摸开始时添加手势,所以在屏幕至少被点击一次之前手势不存在。另外,我会验证您实际上是在使用initWithSize:作为初始化程序,因为在那里添加手势应该没有任何问题。
另一种选择是移动代码以将手势添加到-[SKScene didMovetoView:]
中,在场景出现后立即调用。更多信息in the docs。
- (void)didMoveToView:(SKView *)view
{
[super didMoveToView:view];
// add gesture here!
}
答案 1 :(得分:1)
这是我的第一篇文章!希望不要绊倒我自己的脚趾......
大家好,所以我遇到了UISwipeGestureRecognizer无法正常工作的问题。我在我的initWithSize方法中初始化它所以基于这篇文章我将它移动到我的didMoveToView方法。现在它可以工作(感谢0x7fffffff)。我所做的就是从一种方法中剪切以下两行,然后将它们粘贴到另一种方法中。
_warpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(warpToNextLevel:)];
[self.view addGestureRecognizer:_warpGesture];
在我的调查"我遇到了userInteractionEnabled并尝试在我的initWithSize方法中将其设置为YES ...
self.view.userInteractionEnabled = YES;
NSLog(@"User interaction enabled %s", self.view.userInteractionEnabled ? "Yes" : "No");
即使我将其设置为YES,也会记录NO。进一步的调查发现,如果我没有尝试手动设置userInteractionEnabled,那么在initWithSize期间它是NO(如果我想的话,我似乎无法改变它)并且当我&#时自动设置为YES 39; m in didMoveToView。
这一切都让我觉得相关,但我希望知道的人能够解释这里发生了什么。谢谢!