如何对 CALayer 进行动画处理以使其具有空内容



我有一个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); 

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

空内容进行动画处理的正确方法是什么?

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

    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"];

另一种方法可能是创建一个单独的层来包含您的图像,该图像与其他层的对等项,但就在其他层的后面(您可以使用zposition将其显式放置在其他层后面)-所有这些都包含在根层中。然后,您可以对图像图层的 alpha 进行动画处理以淡入淡出,并且不会有动态创建图像的开销,并且不会淡入淡出其他图层。

最新更新