gpt4 book ai didi

ios - 如何在自定义动画期间调用 scrollViewDidScroll : the same way UIScrollView does,?

转载 作者:可可西里 更新时间:2023-11-01 03:56:20 28 4
gpt4 key购买 nike

我有一个非常大的水平滚动 UIScrollView,它正在重用它的 subview (当它们超出可见区域时移动和更新它们,类似于 UITableView 正在重用单元格)。这依赖于 scrollViewDidScroll: delegate 调用,它给我实际的 contentOffset,在这里我决定何时重用特定的 subview 。到目前为止一切顺利。

有时我需要以编程方式更改 contentOffset,但要使用自定义动画(惯性和弹回最终位置)。我可以使用核心动画很容易地做到这一点。

问题是,在自定义动画期间 scrollViewDidScroll: 未调用委托(delegate)方法 -> 我必须手动执行此操作,以便 subview 重用有效。 我尝试使用每 0.02 秒触发一次的计时器来调用它。现在有两个问题:

  1. 我必须使用 [[_scrollView.layer presentationLayer] bounds].origin.x 获取 UIScrollView contentOffset,因为在动画期间正常 _scrollView.contentOffset 不会改变。

    但是,来自 presentationLayer 的信息不足以进行精确同步 - 有时有点晚。

  2. 问题是当新的 contentOffset 远离当前位置时。看起来内置的 UIScrollView 动画是 CAKeyframeAnimation,并且应该在关键帧位置调用 scrollViewDidScroll。但我无法得到这些。

    如果我依赖与关键帧同步的计时器, View 会在错误的地方重复使用,我在动画期间根本看不到它们。

谁能阐明 UIScrollView 在 setContentOffset:X animated:YES 期间如何以及何时调用 scrollViewDidScroll?是否可以在不违 react 用商店规则的情况下复制它?

最佳答案

首先,我不会使用延迟为 0.02 秒的 NSTimer - 这不是定时器的用途。尝试使用 CADisplayLink,它每帧触发一次。


在您的回调方法中,如果您的自定义动画正在运行,您可以运行您自己的物理代码并分别调用 -setContentOffset:animated:。这甚至可以让您以指数方式缓解哪些 CA 不允许您这样做。

关于ios - 如何在自定义动画期间调用 scrollViewDidScroll : the same way UIScrollView does,?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209849/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com