web-dev-qa-db-ja.com

CoreAnimationが「アルファ」値で機能しない

このコードの前に、私の映画の写真のアルファは0に設定されています。

CABasicAnimation* fadein= [CABasicAnimation animationWithKeyPath:@"alpha"];
    [fadein setToValue:[NSNumber numberWithFloat:1.0]];
    [fadein setDuration:0.5];
    [[moviepic layer]addAnimation:fadein forKey:@"alpha"];

何も起こりませんでした。代わりに事前にアルファを0.5に設定した場合、アルファは0.5のままで、1にアニメーション化されません。

UIView beginAnimations:を使用したコードを見たことがありますが、コアアニメーションを教えているので、CABasicAnimationがこのような単純なタスクを実行できないのはなぜでしょうか。

34
5argon
[CABasicAnimation animationWithKeyPath:@"opacity"];

UIViewはこれをalphaとして公開しますが、CALayerはこれをopacityとして公開します。

100
ohho

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値を保持する場合は、現在のViewControllerを不透明度アニメーションのデリゲートとして設定する必要があります。

opacity.delegate = self

そして、デリゲート関数animationDidStopで、次のことを行う必要があります。

extension ViewController: CAAnimationDelegate {

    func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {   
        view.alpha = toValue
    }
}
2
Ginés SM

@ohhoは投稿された質問に答えます。鉱山はもう少し一般的になります。 CABasicAnimationでアニメーション化できるものとその方法のリストについては、 Appleのドキュメント を参照してください。

1
Julian Król