基本動畫CABasicAnimation - 完成之后閃回初始狀態


基本動畫CABasicAnimation 結束之后,默認閃回初始狀態,那怎么解決呢?

 

position需要設備兩個屬性:

1     // MARK: - 結束后不要閃回去
2     anim.removedOnCompletion = NO;
3     anim.fillMode = kCAFillModeForwards;

設置之后,不會再閃回去,但其實控件的位置並未改變,還在原來的位置,只是“顯示層”挪到了新位置。

可以通過動畫的代理方法來實現:

    // MARK: - 通過代理方法,修正按鈕的位置!
    // 這個代理寫在了NSObject的分類中,不需要尊守任何協議
    anim.delegate = self;

實現代理方法:

 1 #pragma mark - 核心動畫的代理方法
 2 // 核心動畫開始
 3 - (void)animationDidStart:(CAAnimation *)anim {
 4 
 5     NSLog(@"核心動畫開始");
 6     
 7 }
 8 
 9 // 核心動畫結束
10 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
11     
12 //    NSLog(@"核心動畫結束!");
13     // 在核心動畫結束后,將控件的真實位置挪過來!
14     _btn.center = CGPointMake(150, 500);
15     
16     // 將layer中的動畫移除掉,保證不會閃了!
17     [_btn.layer removeAllAnimations];
18 }

 

如果是transform.scale,transform.rotation,只需要設置anim.removedOnCompletion = NO;即可

 

 

常見屬性:

 1 CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
 2 
 3     basicAnimation.duration = 2;
 4     
 5     // 這三個屬性同時最多只能設置2個
 6     basicAnimation.fromValue = @100;
 7     basicAnimation.byValue = @50;
 8     basicAnimation.toValue = @500;
 9     
10     basicAnimation.repeatCount = CGFLOAT_MAX;
11     
12     basicAnimation.removedOnCompletion = NO;
13     basicAnimation.fillMode = kCAFillModeForwards;
14     
15     [_btn.layer addAnimation:basicAnimation forKey:nil];

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM