Непрерывная анимация в iOS?
В моем случае у меня есть представление с содержанием. Я хочу прокрутить этот контент на UILongPressGestureRecognizer
События:
- если положение касания y достаточно близко к границе обзора вверх, прокрутите вверх;
- если у нижней границы обзора достаточно положения касания y, прокрутите вниз.
Я не могу просто использовать scrollView, поэтому я использовал CATransform3D
структуры и animateWithDuration:...
методы. Проблема в том, что я не знаю, как долго я должен прокручивать (продолжительность анимации прокрутки). Вторая проблема заключается в том, что анимация должна вызываться при изменении позиции касания (при длительном нажатии) - это кажется простым, но может повлиять на окончательное решение.
Как решить такую проблему?
1 ответ
Я не уверен, правильно ли я понял ваш вопрос, здесь я делюсь методом, который слушает longPressRecognizer
и анимирует представление, пока пользователь нажимает на это представление. Когда пользователь перестает нажимать, просмотр возвращается к его состоянию по умолчанию. Вы можете проверить, удовлетворяет ли пользовательский жест вашим условиям положения, добавив операторы проверки положения в if/else if. Надеюсь, это поможет.
- (void)longPressed:(UILongPressGestureRecognizer *)recognizer {
UIView *longPressView = self.longPressView;
if (recognizer.state == UIGestureRecognizerStateBegan) {
[UIView animateWithDuration:longPressDuration
delay:0.f
options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionBeginFromCurrentState
animations:^{
//do stuff
}
completion:^(BOOL finished) {
if (finished) {
//long press exceeded time limit: do stuff
}
}];
}
else if (recognizer.state == UIGestureRecognizerStateEnded) {
[UIView animateWithDuration:longPressDuration/2.0
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionBeginFromCurrentState
animations:^{
//do stuff
}
completion:nil];
}
}