Движение изображения в С Gesture Recognizer
У меня есть 1 просмотр контроллера в моем main.storyboard
и у меня есть UIImageView
там, который связан с распознавателем жестов салфетки.
Моя цель состоит в том, чтобы пользователь проводил пальцем влево, а изображение непрерывно перемещалось влево, а затем, если пользователь проведет пальцем вправо / вверх / вниз, оно перестанет двигаться влево и будет двигаться в новом направлении.
До сих пор я пытался использовать этот подход, который не совсем это делает:
-(void)screenWasSwipedDown
{
BackMovement = [NSTimer scheduledTimerWithTimeInterval:0.0035 target:self selector:@selector(BackMovingDown) userInfo:nil repeats:YES];
}
-(void)BackMovingDown
{
Back.center = CGPointMake(Back.center.x, Back.center.y+1);
}
Я сделал это для каждого направления, оно работает, но когда пользователь перемещает новое направление, оно не прекращает движение (в данном случае вниз) и просто накладывает таймеры друг на друга. Таким образом, два пролистывания влево заставляют его двигаться быстрее, или влево и вверх - по диагонали.
Если кто-нибудь знает, как это сделать, пожалуйста, помогите мне
1 ответ
Вы можете сделать недействительным свой таймер с [backMovement invalidate];
Сделайте ваш таймер слабой переменной экземпляра, и он станет нулевым, как только вы сделаете его недействительным.
Таким образом, вы можете сделать свой код свайпа недействительным таймером и создать новый. Вам не нужно создавать отдельные таймеры для каждого направления, поскольку одновременно будет работать только один таймер. Просто создайте одно движение Timer
-(void)screenWasSwipedDown
{
[movementTimer invalidate]; //Also causes the timer to become nil
movementTimer = [NSTimer scheduledTimerWithTimeInterval:0.0035
target:self
selector:@selector(BackMovingDown)
userInfo:nil
repeats:YES];
}
Обратите внимание, что анимация с помощью таймера - не лучший способ. Было бы лучше использовать анимацию UIView, и использовать UIViewAnimationOptionBeginFromCurrentState
опция, так что новая анимация продолжается с места последнего.