iOS實(shí)現(xiàn)音樂播放器圖片旋轉(zhuǎn)
本文實(shí)例為大家分享了iOS實(shí)現(xiàn)音樂播放器圖片旋轉(zhuǎn)的具體代碼,供大家參考,具體內(nèi)容如下
通過給繼承與 UIImageView 的類 CXGImageView 添加 CABasicAnimation 轉(zhuǎn)動(dòng)動(dòng)畫,實(shí)現(xiàn)播放器圖片轉(zhuǎn)動(dòng)效果.
主要提供三個(gè)方法: startRotating, stopRotating,resumeRotate
startRotating
/// 開始動(dòng)畫
func startRotating() {
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
rotateAnimation.isRemovedOnCompletion = false // 避免點(diǎn)擊 Home 鍵返回,動(dòng)畫停止
rotateAnimation.fromValue = 0.0
rotateAnimation.toValue = Double.pi * 2
rotateAnimation.duration = 20
rotateAnimation.repeatCount = MAXFLOAT
self.layer.add(rotateAnimation, forKey: nil)
isRotating = true
}
stopRotating
/// 停止動(dòng)畫
func stopRotating() {
if !isRotating {
return
}
let pausedTime = self.layer.convertTime(CACurrentMediaTime(), from: nil)
// 讓CALayer的時(shí)間停止走動(dòng)
self.layer.speed = 0
// 讓CALayer的時(shí)間停留在pausedTime這個(gè)時(shí)刻
self.layer.timeOffset = pausedTime
isRotating = false
}
resumeRotate
/// 繼續(xù)動(dòng)畫
func resumeRotate() {
if isRotating {
return
}
if self.layer.timeOffset == 0 {
startRotating()
return
}
let pausedTime = self.layer.timeOffset
// 1. 讓CALayer的時(shí)間繼續(xù)行走
self.layer.speed = 1.0
// 2. 取消上次記錄的停留時(shí)刻
self.layer.timeOffset = 0.01
// 3. 取消上次設(shè)置的時(shí)間
self.layer.beginTime = 0.0
// 4. 計(jì)算暫停的時(shí)間(這里也可以用CACurrentMediaTime()-pausedTime)
let timeWhenpause = self.layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime
// 5. 設(shè)置相對于父坐標(biāo)系的開始時(shí)間(往后退timeSincePause)
self.layer.beginTime = timeWhenpause
isRotating = true
}
注意: 使用中發(fā)現(xiàn),當(dāng)點(diǎn)下 Home 鍵再次返回應(yīng)用時(shí),圖片停止轉(zhuǎn)動(dòng),需要將動(dòng)畫 isRemovedOnCompletion 置成 false.
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS應(yīng)用開發(fā)中使用NSLocale類實(shí)現(xiàn)對象信息的本地化
這篇文章主要介紹了iOS應(yīng)用開發(fā)中使用NSLocale類實(shí)現(xiàn)對象信息的本地化的方法,能夠?qū)r(shí)間和貨幣等格式化為與系統(tǒng)本地設(shè)置相同的偏好,需要的朋友可以參考下2016-05-05
使用SDLocalize實(shí)現(xiàn)高效完成iOS多語言工作
這篇文章主要介紹了使用SDLocalize實(shí)現(xiàn)高效完成iOS多語言工作的相關(guān)資料,需要的朋友可以參考下2022-10-10
IOS中UIImageView方法實(shí)現(xiàn)簡單動(dòng)畫
這篇文章主要介紹了IOS中UIImageView方法實(shí)現(xiàn)簡單動(dòng)畫的相關(guān)資料,需要的朋友可以參考下2017-05-05
iOS AVPlayer切換播放源實(shí)現(xiàn)連續(xù)播放和全屏切換的方法
這篇文章主要給大家介紹了關(guān)于iOS中AVPlayer切換播放源實(shí)現(xiàn)連續(xù)播放和全屏切換的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05
iOS NSURLSessionDownloadTask設(shè)置代理文件下載的示例
本篇文章主要介紹了iOS NSURLSessionDownloadTask設(shè)置代理文件下載的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
iOS中containsString和rangeOfString的區(qū)別小結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于iOS中containsString和rangeOfString的一些區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
iOS自定義UIBarButtonItem的target和action示例代碼
這篇文章主要給大家介紹了關(guān)于iOS自定義UIBarButtonItem的target和action的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02

