Как заставить UIScrollView отправлять сообщения scrollViewDidScroll во время анимации - PullRequest
6 голосов
/ 06 сентября 2011

Когда пользователь вручную прокручивает мой UIScrollView, метод scrollViewDidScroll моего делегата неоднократно вызывается во время анимации с новыми обновленными значениями contentOffset.Когда я вызываю «[scrollView setContentOffset: 320 animated: YES», метод делегата вызывается таким же образом.Я решил, что нормальная скорость прокрутки слишком велика для удобства пользователя, поэтому вложил «[scrollView setContentOffset: 320]» в блок «animatedWithDuration:», как Apple рекомендует в справочнике классов UIView.... теперь мой метод scrollViewDidScroll вызывается только один раз в начале анимации с конечным значением, а не во время анимации.Я получаю тот же эффект, когда использую старые методы beginAnimations:

Итак ... кто-нибудь знает, как решить эту проблему?

Кстати, метод setContentOffset в UIScrollView демонстрирует то же поведение.Раньше он вызывался во время анимации, а теперь вызывается только один раз.

1 Ответ

6 голосов
/ 09 сентября 2011

Благодаря подсказке Фичека я получил это на работу.Как сказал Фичек, вы не получаете никаких уведомлений об измененных свойствах во время анимации.Таким образом, хитрость заключается в том, чтобы убедиться, что все, что зависит от измененного свойства, также анимируется одновременно.Вам нужно настроить их анимацию в том же блоке, что и исходное свойство.Если затем вы установите «UIViewAnimationOptionAllowUserInteraction» для анимации, то любое продолжающееся взаимодействие пользователя с теми же свойствами будет работать - и на удивление хорошо, я должен сказать.в то время как UIScrollView прокручивается внизу - вот как я настраиваю свою анимацию:

[UIView animateWithDuration:0.5 delay:0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^{
    [theScrollView setContentOffset:offset];
    // compute newCenter from the new offset
    theDraggedView.center = newCenter;
} completion:^(BOOL finished) {}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...