0

我当前正在进行的 iPad 项目需要一系列事件;大致是这样写的:

→ 用户点击滚动视图顶部浮动面板中的按钮
→ 浮动面板动画关闭
→ 模型重新加载一些数据
→ 滚动视图显示新数据
→ 滚动视图滚动到新的内容偏移
→ 新浮动面板打开

这不仅仅是一个简单的动画。在需要暂停的序列中途,模型需要进行一些后台处理,然后在完成后报告,之后可以恢复序列。此外,浮动面板的动画是通过使用方便的 UIView animateWithDuration:animations:completion: 方法实现的。

当我在 stackoverflow 和其他网络上搜索排序解决方案时,唯一弹出的是 Core Animation。然而,这不是 CA 的情况。

像这样进行排序和计时方法调用的最佳方法是什么?

干杯,EP。

4

1 回答 1

0

CoreAnimation 是一个候选对象,是 UIView 便利类方法内部使用的。正如您所说,这不是一个完整的解决方案,但绝对值得保留面板动画。

否则,我会想象概述将是:

  1. 用户点击滚动视图顶部浮动面板中的按钮;视图控制器发出 (i) 浮动面板上的动画请求;(ii) 模型开始加载数据(我将假设异步)
  2. CoreAnimation 有时会报告动画已完成。在某个时候,模型报告新数据已加载。视图控制器一直等到这两件事都发生了。
  3. 新数据被推送到滚动视图
  4. 视图控制器滚动视图,可能使用-scrollRectToVisible:animated:或-setContentOffset: animated:(我假设动画设置为“YES”)
  5. 视图控制器也是UIScrollViewDelegate,它等待接收-scrollViewWillBeginDecelerating:-scrollViewDidEndDecelerating:,或者可能检查-scrollViewDidScroll:中的 contentOffset
  6. 在适当的时候,它在新的浮动面板中具有 CoreAnimation 过渡。

因此,您允许滚动视图处理自己的动画并信任它报告动画状态,使用 CoreAnimation 就像您的代码已经为面板所做的那样,否则将所有内容连接到视图控制器中。无需显式使用 CoreAnimation,只需坚持使用您已经使用的 UIView 方法即可。

如果您的模型是同步的而不是异步的,那么只需在发出请求以摆脱第一个浮动面板后立即开始处理 - 即使主线程很忙,CoreAnimation 任务也会继续。

于 2011-03-02T14:47:00.220 回答