就最近的項目中遇到的旋轉動畫
需求 1.提供圖片 讓圖片旋轉起來
2.讓動畫暫停以做到更好的用戶體驗
3.暫停后必須繼續(xù)動畫 然后再移除否則第2次做旋轉時會出現(xiàn)動畫沒響應的情況
//1.動畫star
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ];
rotationAnimation.duration = 1;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 10000;
[view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
//2.動畫pause
// 將當前時間CACurrentMediaTime轉換為layer上的時間, 即將parent time轉換為local time
CFTimeInterval pauseTime = [view.layer convertTime:CACurrentMediaTime() fromLayer:nil];
// 設置layer的timeOffset, 在繼續(xù)操作也會使用到
view.layer.timeOffset = pauseTime;
// local time與parent time的比例為0, 意味著local time暫停了
view.layer.speed = 0;
//3.動畫continue
// 時間轉換
CFTimeInterval pauseTime = view.layer.timeOffset;
// 計算暫停時間
CFTimeInterval timeSincePause = CACurrentMediaTime() - pauseTime;
// 取消
view.layer.timeOffset = 0;
// local time相對于parent time世界的beginTime
view.layer.beginTime = timeSincePause;
// 繼續(xù)
view.layer.speed = 1;
//4.動畫remove
//移除動畫(根據(jù)key值)
[view.layer removeAnimationForKey:@"rotationAnimation"];