このコードの前に、私の映画の写真のアルファは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がこのような単純なタスクを実行できないのはなぜでしょうか。
[CABasicAnimation animationWithKeyPath:@"opacity"];
UIViewはこれをalpha
として公開しますが、CALayerはこれをopacity
として公開します。
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
}
}
@ohhoは投稿された質問に答えます。鉱山はもう少し一般的になります。 CABasicAnimation
でアニメーション化できるものとその方法のリストについては、 Appleのドキュメント を参照してください。