如何在视图出现后准确启动Core Animation?

时间:2012-02-02 23:56:53

标签: ios uiviewcontroller uinavigationcontroller uiscrollview core-animation

我正在尝试在视图循环期间的确切时刻为图层设置动画。例如,假设动画是一个简单的淡入(应用于不透明度键的CABasicAnimation)。但我无法确定如何确保我的动画在CALayer上只有在我确定包含的视图(和图层)可见时才开始。

2个案例:

  1. 在容器视图(和超级层)之后,仅在淡入淡出层 这个层已经被用户看到,以响应 superview的控制器被推入导航控制器' 堆。也就是说,仅在动画和viewController->视图之后 由[navigationController pushViewController:x触发的设置 动画:YES];已经完成并且viewController的视图是 已经可见。

  2. 仅在用户滚动后通过滚动淡化图层     查看分页,到某个页面。也就是说,用户滚动到页面n     (并且每个页面都是滚动视图的子视图)并且仅在新视图之后     页面已滚动到内容视图的中心,执行     动画开始。

  3. 有点像,一旦翻开“书籍”页面就开始制作动画,以便在每一页上讲述一个故事。

    有道理吗?

1 个答案:

答案 0 :(得分:1)

我想出了两个案例:

对于第一种情况,动画代码需要在viewDidAppear中:关键是将动画包含在CATransaction中。出于某种原因,没有显式事务,动画似乎没有。

第二个例子非常相似,只有那个会在scrollview的委托DidEndDecelerating方法中添加CATransaction:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
  int pageNumber = floor(self.scrollView.contentOffset.x / self.scrollView.frame.size.width);
  if(pageNumber == n)
  {
    [CATransaction begin];
    ...