代码之家  ›  专栏  ›  技术社区  ›  Mac Umer

iPhone的核心动画问题

  •  2
  • Mac Umer  · 技术社区  · 16 年前

    基本上,我有一个有两个子视图的视图,我正在尝试设置它们的不透明度的动画,这样一个淡入而另一个淡出。问题是,子视图不是逐渐淡入/淡出,而是立即切换到/从完全/零不透明度。我尝试用CATransaction来调整动画的持续时间,但没有明显的效果。这也不是特定于动画不透明-动画位置显示同样的问题。

    我使用的代码(在superview的方法中)如下所示:

    CALayer* oldLayer = ((UIView*) [[self subviews] objectAtIndex:0]).layer;
    CALayer* newLayer = ((UIView*) [[self subviews] objectAtIndex:1]).layer;
    
    [CATransaction begin];
    [CATransaction setAnimationDuration:1.0f];
    oldLayer.opacity = 0.0;
    newLayer.opacity = 1.0;
    [CATransaction commit];
    

    有人知道问题出在哪里吗?

    3 回复  |  直到 16 年前
        1
  •  4
  •   Noah Witherspoon    16 年前

    你使用核心动画而不是普通动画有什么原因吗 UIView 动画包装器?这样做很简单

    UIView *oldView = [[self subviews] objectAtIndex:0];
    UIView *newView = [[self subviews] objectAtIndex:1];
    
    [UIView beginAnimations:@"swapViews" context:nil];
    [UIView setAnimationDuration:1];
        oldView.alpha = 0;
        newView.alpha = 1;
    [UIView commitAnimations];
    
        2
  •  18
  •   Brad Larson    16 年前

    Noah的解决方案是做你想做的事情的最干净的方法,但是你看不到动画的原因是隐式动画被禁用了。因为没有任何动画,所以CATransaction无法设置任何内容的持续时间。

    CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    opacityAnimation.removedOnCompletion = NO;
    opacityAnimation.fillMode = kCAFillModeForwards;
    
    [oldLayer addAnimation:opacityAnimation forKey:@"opacity"];
    [newLayer addAnimation:opacityAnimation forKey:@"opacity"];
    
    [CATransaction begin];
    [CATransaction setAnimationDuration:1.0f];
    oldLayer.opacity = 0.0;
    newLayer.opacity = 1.0;
    [CATransaction commit];
    

    (请注意,我不确定是否可以在此处重复使用不透明度动画。可能需要为每个层创建单独的实例。)

        3
  •  2
  •   JBRWilkinson    16 年前

    您需要在这里使用显式CATransaction吗?

    文件 here 暗示你没有。

    推荐文章