(iphone)在以编程方式滚动视图后强制调用ScrollViewDiEndDecelling?
我使用(iphone)在以编程方式滚动视图后强制调用ScrollViewDiEndDecelling?,iphone,animation,uiscrollview,Iphone,Animation,Uiscrollview,我使用scrollRectToVisible:animated: 但是没有调用ScrollViewDiEndDecelling 有没有办法强制调用该函数?正如您所发现的,并不总是调用ScrollViewDiEndDecelling(如果您用手指移动滚动视图并使其停止,也不会调用它) 由于ScrollViewDiEndDecreating是一种委托方法,因此您可以强制按如下方式调用它: [[scrollView delegate] scrollViewDidEndDecelerating:scro
scrollRectToVisible:animated:
但是没有调用ScrollViewDiEndDecelling
有没有办法强制调用该函数?正如您所发现的,并不总是调用
ScrollViewDiEndDecelling
(如果您用手指移动滚动视图并使其停止,也不会调用它)
由于ScrollViewDiEndDecreating
是一种委托方法,因此您可以强制按如下方式调用它:
[[scrollView delegate] scrollViewDidEndDecelerating:scrollView];
ScrollViewDiEndDecreating
不会为scrollRectToVisible
或setContentOffset
调用(即,以编程方式滚动)。如果您注意到头文件中这个方法的声明,它会清楚地提到它是“在我们移动的时候用手指向上调用的”
现在,为了解决您的问题,将调用
ScrollViewDiEndScrollingAnimation
委托(用于setContentOffset
和scrollRectToVisible
),您可以使用它。我通过从ScrollViewDiEndScrollingAnimation调用ScrollViewDiEndScrollingAnimation解决了这个问题
-(void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
[self scrollViewDidEndDecelerating:scrollView];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//your code
}
添加下面的代码修复了我案例中的一个问题
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
scrollViewDidEndDecelerating(scrollView)
}
}
scrollView.delegate
KKK4SO:ScrollViewDidEndDeclaration在scrollRectToVisible scrollViewDidEndScrollingAnimation中不会被调用,在实际手指滚动中不会被调用,这正常吗?@Eugene:是的,非常正常。scrollViewDidScroll:delegate响应这两个选项。OMFG谢谢!我在QA处来回走动,无法重新编程一个bug,结果我只是滚动屏幕,与他们的不同:)你把这个称为什么?如果你同时使用手动滚动和程序滚动(即使用
setContentOffSet
),这也可以工作吗?也就是说,如果您使用此格式,并且手动滚动,则不会调用两次ScrollViewDiEndDecelling
?
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate, decelerate: Bool) {
if decelerate == false {
scrollViewDidEndDecelerating(scrollView)
}
}