(iphone) принудительно вызывать scrollViewDidEndDecelerating после программной прокрутки представления? - PullRequest
19 голосов
/ 05 июня 2011

Я анимирую свиток с помощью scrollRectToVisible:animated:

Но scrollViewDidEndDecelerating не вызывают.

Есть ли способ заставить функцию вызываться?

Ответы [ 5 ]

51 голосов
/ 05 июня 2011

scrollViewDidEndDecelerating не будет вызываться для scrollRectToVisible или setContentOffset (т.е. программная прокрутка). Если вы заметили объявление этого метода в заголовочном файле, в нем четко указано, что он «вызывается по мере продвижения».

Теперь для решения вашей проблемы будет вызван scrollViewDidEndScrollingAnimation делегат (для setContentOffset и scrollRectToVisible), который вы можете использовать.

5 голосов
/ 05 июня 2011

Как вы обнаружили, scrollViewDidEndDecelerating не всегда вызывается (если вы переместили представление прокрутки пальцем и остановили его, оно также не будет вызвано).

Так как scrollViewDidEndDecelerating - это метод делегата, который можно заставить вызывать так:

[[scrollView delegate] scrollViewDidEndDecelerating:scrollView];
4 голосов
/ 03 октября 2014

Я решил это, вызвав scrollViewDidEndDecelerating из scrollViewDidEndScrollingAnimation

-(void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    [self scrollViewDidEndDecelerating:scrollView];
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //your code
}
1 голос
/ 04 ноября 2016

Добавление кода ниже исправило проблему в моем случае.

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if !decelerate {
        scrollViewDidEndDecelerating(scrollView)
    }
}
0 голосов
/ 25 апреля 2019
  1. Использование scrollView.delegate.

  2. Для очень плавной анимации вида необходимо добавить функцию делегата.

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate, decelerate: Bool)  { 
    if decelerate == false {
        scrollViewDidEndDecelerating(scrollView)
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...