【发布时间】:2011-06-05 07:51:30
【问题描述】:
我用scrollRectToVisible:animated:为滚动设置动画
但是scrollViewDidEndDecelerating 没有被调用。
有没有办法强制调用函数?
【问题讨论】:
标签: iphone animation uiscrollview
我用scrollRectToVisible:animated:为滚动设置动画
但是scrollViewDidEndDecelerating 没有被调用。
有没有办法强制调用函数?
【问题讨论】:
标签: iphone animation uiscrollview
scrollViewDidEndDecelerating 不会被 scrollRectToVisible 或 setContentOffset 调用(即,以编程方式滚动)。如果您在头文件中注意到此方法的声明,它清楚地提到它是“在我们移动时调用”。
现在,为了解决您的问题,将调用 scrollViewDidEndScrollingAnimation 委托(对于 setContentOffset 和 scrollRectToVisible),您可以使用它。
【讨论】:
正如您所发现的,scrollViewDidEndDecelerating 并不总是被调用(如果您用手指移动滚动视图并使其停止,它也不会被调用)。
由于scrollViewDidEndDecelerating 是一个委托方法,您可以像这样强制调用它:
[[scrollView delegate] scrollViewDidEndDecelerating:scrollView];
【讨论】:
我通过从 scrollViewDidEndScrollingAnimation
调用 scrollViewDidEndDecelerating 解决了这个问题-(void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
[self scrollViewDidEndDecelerating:scrollView];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//your code
}
【讨论】:
setContentOffSet),这是否也有效? IE。如果你有这种格式,手动滚动不会scrollViewDidEndDecelerating被调用两次?
添加下面的代码解决了我的问题。
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
scrollViewDidEndDecelerating(scrollView)
}
}
【讨论】:
使用scrollView.delegate。
对于非常流畅的视图动画,您应该添加一个委托函数。
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate, decelerate: Bool) {
if decelerate == false {
scrollViewDidEndDecelerating(scrollView)
}
}
【讨论】: