(iphone) force scrollViewDidEndDecelerating для вызова после программной прокрутки представления?
Я анимирую свиток с помощью scrollRectToVisible:animated:
Но scrollViewDidEndDecelerating
не вызывается.
Есть ли способ заставить функцию вызываться?
Ответы
Ответ 1
scrollViewDidEndDecelerating
не будет вызываться для scrollRectToVisible
или setContentOffset
(т.е. прокрутки программно). Если вы заметили объявление этого метода в заголовочном файле, в нем четко указано, что он "вызывается пальцем вверх, когда мы двигаемся".
Теперь, чтобы решить вашу проблему, будет вызван делегат scrollViewDidEndScrollingAnimation
(для setContentOffset
и scrollRectToVisible
), который вы можете использовать.
Ответ 2
Как вы уже нашли, scrollViewDidEndDecelerating
не всегда вызывается (если вы переместили прокрутку в свой палец и остановили его, он также не будет вызван).
Так как scrollViewDidEndDecelerating
- это метод делегата, вы можете заставить его вызывать вот так:
[[scrollView delegate] scrollViewDidEndDecelerating:scrollView];
Ответ 3
Я решил его, вызвав scrollViewDidEndDecelerating из scrollViewDidEndScrollingAnimation
-(void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
[self scrollViewDidEndDecelerating:scrollView];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//your code
}
Ответ 4
Добавление кода ниже исправлено в моем случае.
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
scrollViewDidEndDecelerating(scrollView)
}
}
Ответ 5
-
Используйте scrollView.delegate
.
-
Для очень плавной анимации представления вы должны добавить функцию делегата.
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate, decelerate: Bool) {
if decelerate == false {
scrollViewDidEndDecelerating(scrollView)
}
}