如何调用scrollViewDidScroll:以同样的方式UIScrollView的做法,但自定义

2019-07-29 01:37发布

我有一个非常大的水平滚动的UIScrollView这是重用它的子视图(移动,并更新他们时,他们都出来了可视面积,像类似的UITableView是重复使用的细胞)。 这依赖于scrollViewDidScroll:委托调用,这给了我实际contentOffset,在这里,我决定什么时候重新使用特定的子视图。 到现在为止还挺好。

有时候,我需要通过编程修改contentOffset,但与自定义动画(惯性反弹到最终位置)。 我可以使用核心动画做到这一点很容易。

问题是,期间自定义动画scrollViewDidScroll:委托方法不叫- >我必须做手工,这样子视图重用的作品。 我试图与计时器射击每个0.02秒调用它。 现在有两个问题:

  1. 我必须用[_scrollView.layer表示层]界限] .origin.x因为动画在正常_scrollView.contentOffset不改变得到的UIScrollView contentOffset。

    但是从表示层信息不足以精确同步-有时是有点晚了。

  2. 问题是,当新的contentOffset是远离当前位置。 它看起来像内置的UIScrollView动画CAKeyframeAnimation,并scrollViewDidScroll应该被称为关键帧的位置。 但我不能够得到这些。

    如果我靠,这是符合关键帧同步计时器,意见被重用在错误的地方和动画中我看不到它们。

任何人都可以阐明setContentOffset期间的UIScrollView如何以及究竟何时调用scrollViewDidScroll一些轻:X动画:YES? 是否有可能重现它没有打破AppStore的规则?

Answer 1:

首先,我不会使用NSTimer 0.02秒的延迟-这不是计时器都应该进行。 尝试使用CADisplayLink ,它每帧触发一次。


在回调方法,你可以 - 如果你的自定义动画运行 - 运行自己的物理代码,并呼吁-setContentOffset:分别为:动画。 这甚至让你成倍缓解其CA不会放过你的。



文章来源: How to call scrollViewDidScroll: the same way UIScrollView does, but during custom animation?