1. 程式人生 > 程式設計 >iOS實現音樂播放器圖片旋轉

iOS實現音樂播放器圖片旋轉

本文例項為大家分享了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.

原始碼下載

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。