iOS實現音樂播放器圖片旋轉
阿新 • • 發佈:2020-10-21
本文例項為大家分享了iOS實現音樂播放器圖片旋轉的具體程式碼,供大家參考,具體內容如下
通過給繼承與 UIImageView 的類 CXGImageView 新增 CABasicAnimation 轉動動畫,實現播放器圖片轉動效果.
主要提供三個方法: startRotating,stopRotating,resumeRotate
startRotating
/// 開始動畫 func startRotating() { let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation") rotateAnimation.isRemovedOnCompletion = false // 避免點選 Home 鍵返回,動畫停止 rotateAnimation.fromValue = 0.0 rotateAnimation.toValue = Double.pi * 2 rotateAnimation.duration = 20 rotateAnimation.repeatCount = MAXFLOAT self.layer.add(rotateAnimation,forKey: nil) isRotating = true }
stopRotating
/// 停止動畫 func stopRotating() { if !isRotating { return } let pausedTime = self.layer.convertTime(CACurrentMediaTime(),from: nil) // 讓CALayer的時間停止走動 self.layer.speed = 0 // 讓CALayer的時間停留在pausedTime這個時刻 self.layer.timeOffset = pausedTime isRotating = false }
resumeRotate
/// 繼續動畫 func resumeRotate() { if isRotating { return } if self.layer.timeOffset == 0 { startRotating() return } let pausedTime = self.layer.timeOffset // 1. 讓CALayer的時間繼續行走 self.layer.speed = 1.0 // 2. 取消上次記錄的停留時刻 self.layer.timeOffset = 0.01 // 3. 取消上次設定的時間 self.layer.beginTime = 0.0 // 4. 計算暫停的時間(這裡也可以用CACurrentMediaTime()-pausedTime) let timeWhenpause = self.layer.convertTime(CACurrentMediaTime(),from: nil) - pausedTime // 5. 設定相對於父座標系的開始時間(往後退timeSincePause) self.layer.beginTime = timeWhenpause isRotating = true }
注意: 使用中發現,當點下 Home 鍵再次返回應用時,圖片停止轉動,需要將動畫 isRemovedOnCompletion 置成 false.
原始碼下載
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。