UIPanGestureRecognizer в SKScene
Я экспериментировал с UIGestureRecognizers
и новым SKScene/SKNode's
в SpriteKit
. У меня была одна проблема, и я приблизился к ее исправлению, но меня смущает одна вещь. По сути, у меня есть распознаватель жестов, который позволяет пользователю перетаскивать спрайт на экран.
Единственная проблема, с которой я сталкиваюсь, заключается в том, что для того, чтобы фактически инициализировать жест панорамы, требуется один щелчок, а затем только на SECUT на нем работает правильно. Я думаю, что это связано с тем, что мой жест передвижения инициализируется в 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];
}
Ответы
Ответ 1
Это потому, что вы добавляете жест в прикосновениях, так что жест не существует, пока экран не будет прослушиваться хотя бы один раз. Кроме того, я бы удостоверился, что вы действительно используете initWithSize: как ваш инициализатор, потому что у вас не должно возникнуть проблем с добавлением там жеста.
Другой вариант - переместить код, чтобы добавить жест в -[SKScene didMovetoView:]
, который вызывается сразу после того, как сцена была представлена. Подробнее в документах.
- (void)didMoveToView:(SKView *)view
{
[super didMoveToView:view];
// add gesture here!
}
Ответ 2
Это мой первый пост! Надеюсь не путешествовать по моим пальцам...
Привет, ребята, поэтому у меня возникла проблема с UISwipeGestureRecognizer, который не работает. Я инициализировал его в моем методе initWithSize, поэтому на основе этого сообщения я переместил его в мой метод didMoveToView. Теперь он работает (спасибо 0x7fffffff). Все, что я сделал, было отрезано двумя строками одного метода и вставляло их в другой.
_warpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(warpToNextLevel:)];
[self.view addGestureRecognizer:_warpGesture];
В моем "исследовании" я наткнулся на userInteractionEnabled и попытался установить его в YES в моем методе initWithSize...
self.view.userInteractionEnabled = YES;
NSLog(@"User interaction enabled %s", self.view.userInteractionEnabled ? "Yes" : "No");
Это будет регистрировать NO, хотя я бы просто установил его в YES. Дальнейшее исследование показало, что если я не пытаюсь вручную установить userInteractionEnabled, тогда это НЕТ во время initWithSize (я не могу изменить это, если я хочу), и автоматически получает значение YES, когда я в didMoveToView.
Это все кажется мне актуальным, но я бы хотел, чтобы кто-то из знакомых объяснил, что происходит здесь. Спасибо!