Движение изображения в С 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 опция, так что новая анимация продолжается с места последнего.

Другие вопросы по тегам