如何为CALayer设置动画以显示空内容

时间:2013-09-30 21:52:57

标签: uiimage core-animation calayer cabasicanimation

我有一个CALayer,里面有一个图像,它有几个子图层。我想动画它没有内容(没有图像),但继续显示子图层。此代码不起作用:

   CABasicAnimation *backgroundOut = [CABasicAnimation animationWithKeyPath:@"contents"];
   backgroundOut.toValue = [NSNull null];
   backgroundOut.fillMode = kCAFillModeForwards;
   backgroundOut.removedOnCompletion = NO;
   backgroundOut.duration = 3.0;
   [_backgroundLayer addAnimation:backgroundOut forKey:@"contents"];

这是我能让它发挥作用的唯一方法:

   backgroundOut.toValue = (__bridge id)([UIImage imageNamed:@"blankImage"].CGImage); 

请注意,我不想弄乱不透明度或其他任何东西,因为这个图层有子图层需要仍然可见。

动画空内容的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为这是最干净的方法,因为没有其他答案即将出现:

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0);
    UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    CABasicAnimation *backgroundOut = [CABasicAnimation animationWithKeyPath:@"contents"];
    backgroundOut.toValue = (__bridge id)(blank.CGImage);
    backgroundOut.fillMode = kCAFillModeForwards;
    backgroundOut.removedOnCompletion = NO;
    backgroundOut.duration = 3.0;

    [_backgroundLayer addAnimation:backgroundOut forKey:@"contents"];

答案 1 :(得分:0)

另一种方法可能是创建一个单独的图层来包含您的图像,该图像是其他图层的对等图像,但只是在其他图层的后面(您可以使用zposition将其明确地放在其他图层后面) - 全部包含在根层。然后,您可以为图像层的alpha设置动画以进行淡入淡出,并且不会有动态创建图像的开销,也不会淡化其他图层。