如何调用scrollViewDidScroll:与UIScrollView相同,但在自定义动画期间?
我有一个非常大的水平滚动UIScrollView,它重用它的子视图(当它们超出可见区域时移动和更新它们,类似于UITableView重用单元格)。 这依赖于scrollViewDidScroll:委托调用,它给了我实际的contentOffset,在这里我决定何时重用特定的子视图。 到现在为止还挺好。
有时我需要以编程方式更改contentOffset,但需要使用自定义动画(惯性并弹回到最终位置)。 我可以使用核心动画很容易地做到这一点。
问题是,在自定义动画期间,不调用scrollViewDidScroll:delegate方法 – >我必须手动执行,以便重用子视图。 我试着用定时器每次发射0.02秒来调用它。 现在有两个问题:
-
我必须使用[[_scrollView.layer presentationLayer] bounds] .origin.x获取UIScrollView contentOffset,因为在动画期间,正常的_scrollView.contentOffset不会改变。
但是,来自presentationLayer的信息不足以进行精确同步 – 有时候会有点迟。
-
问题是当新的contentOffset远离当前位置时。 看起来内置的UIScrollView动画是CAKeyframeAnimation,而应该在关键帧位置调用scrollViewDidScroll。 但我无法得到这些。
如果我依赖于未与关键帧同步的计时器,则会在错误的位置重复使用视图,而在动画期间我根本看不到它们。
任何人都可以了解一下UConcrollView在setContentOffset期间如何以及何时调用scrollViewDidScroll:X animated:YES? 是否可以在不破坏appstore规则的情况下重现它?
首先,我不会使用延迟为0.02秒的NSTimer
– 这不是定时器的假设。 尝试使用CADisplayLink
,每帧触发一次。
在您的回调方法中,您可以 – 如果您的自定义动画正在运行 – 运行您自己的物理代码并分别调用-setContentOffset:animated:。 这甚至可以让您以指数方式轻松放松哪些CA不会让您失望。
- CLLocation的horizontalAccuracy和VerticalAccuracy是指什么?
- Iphone应用程序在didFinishLaunchingWithOptions之前崩溃
- Xcode 6的错误”ViewController’类的重复接口定义
- 什么是正确的方式来调用?
- 为什么需要为每个线程创buildABAddressbookRef?
- 背景上的图像pageViewController重叠相反
- 获取设备图像比例(例如@ 1x,@ 2x和@ 3x)
- Bootstrap 3.0.3 glyphicons在iOS 7上显示表情符号
- iPad的3 – 与kEAGLDrawablePropertyRetainedBacking和视网膜的OpenGL错误?