CALayer動畫的開始.暫停.繼續(xù).移除

就最近的項目中遇到的旋轉動畫
需求 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"];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容