Непрерывная анимация в 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];
    }
}
Другие вопросы по тегам