核心动画无法使用“alpha”值工作

35
在这段代码之前,我的电影图片的不透明度被设置为0。
CABasicAnimation* fadein= [CABasicAnimation animationWithKeyPath:@"alpha"];
    [fadein setToValue:[NSNumber numberWithFloat:1.0]];
    [fadein setDuration:0.5];
    [[moviepic layer]addAnimation:fadein forKey:@"alpha"];

如果我事先将alpha设置为0.5,则不会发生任何事情,而如果使用CABasicAnimation进行动画处理,其alpha值仍将保持为0.5,不会动画到1。

我看过一些使用UIView beginAnimations:的代码,但我正在教授核心动画,所以我想知道为什么CABasicAnimation不能执行这样简单的任务?

3个回答

105
[CABasicAnimation animationWithKeyPath:@"opacity"];

UIView将其称为alpha,而CALayer将其称为opacity


我很快就会尝试这个。但是还有其他类似的情况吗?我在哪里可以查看可以用于KeyPath的内容?(通常我会检查具有setAlpha属性的对象属性,但在这种情况下它不匹配...) - 5argon
4
使用Core Animation时,您将动画化的是CALayer属性而不是UIView属性,因此应查找正确的属性名称的位置是层 - 参见:view.layer - Palimondo

2

对于Swift:

let opacity = CABasicAnimation(keyPath: "opacity")
opacity.fromValue = fromValue
opacity.toValue = toValue
opacity.duration = duration
opacity.beginTime = CACurrentMediaTime() + beginTime  //If a delay is needed

view.layer.add(opacity, forKey: nil)

如果你想保留最终的 alpha 值,你需要将当前视图控制器设置为不透明度动画的代理:

opacity.delegate = self

在代理方法animationDidStop中,您应该执行以下操作:

extension ViewController: CAAnimationDelegate {

    func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {   
        view.alpha = toValue
    }
}

1

@ohho回答了发布的问题。我的回答会更加通用。关于可以使用CABasicAnimation进行动画处理的内容和方法,请参考苹果的文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接