[英]UIPanGestureRecognizer in SKScene
我一直在嘗試使用UIGestureRecognizers
和SKScene/SKNode's
新SKScene/SKNode's
SpriteKit
。 我有一個問題,我接近修復它但我對一件事感到困惑。 基本上,我有一個平移手勢識別器,允許用戶在屏幕上拖動精靈。
我遇到的唯一問題是,實際初始化平移手勢需要一次點擊,然后只有在SECOND上點擊它才能正常工作。 我想這是因為我的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:]
,在場景出現后立即調用。 更多信息在文檔中 。
- (void)didMoveToView:(SKView *)view
{
[super didMoveToView:view];
// add gesture here!
}
這是我的第一篇文章! 希望不要絆倒我自己的腳趾......
大家好,所以我遇到了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(如果我想的話我似乎無法改變它)並且當我在didMoveToView時自動設置為YES。
這一切都讓我覺得相關,但我希望知道的人解釋這里發生了什么。 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.