Остановка анимации UIView с помощью removeAllAnimations
У меня есть простая UILabel, которая начинает вращаться, когда вы долго нажимаете на нее. Я успешно достигаю этого с помощью следующего кода:
-(IBAction)longPressEffect:(UILongPressGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateBegan) {
UIViewAnimationOptions animationOptions = UIViewAnimationCurveLinear | UIViewAnimationOptionRepeat;
[UIView animateWithDuration:0.4 delay:0.0 options:animationOptions animations:^ {
labelObject.transform = CGAffineTransformMakeRotation(DegreesToRadians(angle));
} completion:nil];
angle = angle + 180;
}
else if (sender.state == UIGestureRecognizerStateEnded) {
;
}
}
Пользователь может остановить эту анимацию в любой момент, просто дважды щелкнув ярлык. Вот код для этого:
-(IBAction)doubleTapEffect:(UITapGestureRecognizer *)sender {
[labelObject.layer removeAllAnimations];
labelObject.transform = CGAffineTransformMakeRotation(DegreesToRadians(0));
}
Проблема в том, что в следующий раз, когда вы будете долго нажимать на ярлык, он не отвечает. Анимация вращения не запускается снова. Вы должны нажать на нее еще раз, чтобы снова начать работу.
Итак, картина такова:
1) Длительное нажатие - анимация начинается
2) Двойной клик - анимация останавливается
3) Долгое нажатие - ничего не происходит
4) Продолжительное нажатие - анимация запускается снова.
Как это исправить?
1 ответ
Это анимация - это не выглядит так, потому что вы все время добавляете 180 к углу.
При условии, что angle
для начала 180, вы анимируете от 0 до 180, затем от 180 до 180, затем от 180 до 180. Тогда угол равен + 180, что устанавливает угол на 360, а начальная анимация равна 360, что интерпретируется как 0, поэтому метка оживляет от 0 до 0.
+ Изменить
angle = angle + 180;
в
angle = angle + 30;
и вы должны увидеть, что вращение происходит.
Эта ссылка может помочь вам сделать непрерывный поворот, если вы пытаетесь это сделать:
Как я могу вращать UIB-кнопку непрерывно и иметь возможность ее остановить?