[英]CABasicAnimation stop animation on completion - iOS
我有一個iOS應用程序,重復使用CABasicAnimation
:
CABasicAnimation *fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
fadeAnim.toValue = [NSNumber numberWithFloat:0.2];
fadeAnim.duration = 1.0;
fadeAnim.autoreverses = YES;
fadeAnim.repeatCount = INFINITY;
[colourbutton.titleLabel.layer addAnimation:fadeAnim forKey:@"opacity"];
我有一個按鈕,當按下該按鈕時將停止動畫。
-(IBAction)stopAnim {
[colourbutton.titleLabel.layer removeAllAnimations];
}
它可以正常工作,但我要注意的一件事是突然停止動畫,它不會讓動畫結束。 因此,如何獲取它以完成當前動畫然后停止。 (或者換句話說,如何獲取removeAllAnimations....withAnimation
?)。
附帶說明一下,我是否需要包括CoreAnimation
框架才能使其正常工作。 到目前為止,動畫正在運行,我還沒有導入CoreAnimation
框架。
謝謝,丹。
只需添加另一個動畫,然后刪除第一個動畫,如下所示:
CABasicAnimation *endAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
endAnimation.fromValue = @(((CALayer *)colourbutton.titleLabel.layer.presentationLayer).opacity);
endAnimation.toValue = @(1);
endAnimation.duration = 1.0;
[colourbutton.titleLabel.layer addAnimation:endAnimation forKey:@"end"];
[colourbutton.titleLabel.layer removeAnimationForKey:@"opacity"];
這里的關鍵是使用表示層來獲取當前狀態。 不要忘記設置圖層的實際結束狀態,因為動畫將在完成時被刪除。
在NKorotov的回答中,他使用presentationLayer
來找出您在動畫中的位置。 那是正確的方法。
您可以采用此解決方案,盡管IMO也必須正確計算持續時間動畫(基於原始動畫的持續時間以及當前沿動畫路徑的距離)。
如果您發現添加新動畫“很傻”,則可以在正確的時間使用dispatch_after
調用removeAllAnimations
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.