有没有办法知道动画何时结束并且uiscrollview已经停止。
答案 0 :(得分:21)
答案 1 :(得分:12)
我是这样做的,因为有时使用委托对我来说不实用,就像我在UIViewController转换中这样做:
[UIView animateWithDuration:0.3 animations:^{
[scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:NO];
} completion:^(BOOL finished) {
// This is called when it's complete
}];
答案 2 :(得分:4)
以下列方式为您的UIScrollView实现UIScrollViewDelegate委托方法:
当您通过调用scrollViewDidEndScrollingAnimation:
或setContentOffset:animated:
方法(带有动画:是)启动滚动时,使用scrollRectToVisible:animated:
来检测滚动动画何时结束。
如果要监视由触摸手势启动的滚动视图运动,请使用scrollViewDidEndDecelerating:
方法,该方法在滚动运动停止时调用。
答案 3 :(得分:2)
// do note that you need all three of the following
public func scrollViewDidEndScrollingAnimation(_ s: UIScrollView) {
// covers case setContentOffset/scrollRectToVisible
fingerOrProgrammaticMoveDone()
}
public func scrollViewDidEndDragging(_ s: UIScrollView, willDecelerate d: Bool) {
if decelerate == false {
// covers certain cases of user finger
fingerOrProgrammaticMoveDone()
}
}
public func scrollViewDidEndDecelerating(_ s: UIScrollView) {
// covers certain cases of user finger
fingerOrProgrammaticMoveDone()
}
(请注意不要忘记中间的多余“ if”子句。)
然后在fingerOrProgrammaticMoveDone()
中做您需要的事情。
一个很好的例子是处理页面滚动的噩梦。知道自己在哪个页面上非常非常不敢。
答案 4 :(得分:-1)
scrollViewDidEndDecelerating:
当scrollView完全停止时,将调用UIScrollView委托方法。