久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

利用Swift實現各類的CATransition動畫詳解

CATransition動畫主要在過渡時使用,比如兩個頁面層級改變的時候添加一個轉場效果。CATransition分為兩類,一類是公開的動畫效果,一類是非公開的動畫效果。這篇文章主要給大家介紹了

前言

最近因為工作的需要,打算用swift重構現有項目,實現過程中發現用到了很多系統的動畫實現,因為之前的都是用OC實現的,這里主要是把一些動畫效果來通過swift實現一下。

這篇文章主要是實現一下CATransition動畫的不同效果。

第一步 創建一個swift文件并聲明相應的枚舉類型


enum TransitionAnimType : Int {
case fade = 0,    //淡入淡出
push,      //推擠
reveal,      //揭開
moveIn,      //覆蓋
cube,      //立方體
suckEffect,     //吮吸
oglFlip,     //翻轉
rippleEffect,    //波紋
pageCurl,     //翻頁
pageUnCurl,     //反翻頁
cameraIrisHollowOpen,  //開鏡頭
cameraIrisHollowClose,  //關鏡頭
curlDown,     //下翻頁
curlUp,      //上翻頁
flipFromLeft,    //左翻轉
flipFromRight,    //右翻轉
ramdom      //隨機
}

enum TransitionSubType : Int {
case top = 0,    //上
left,      //左
bottom,      //下
right,      //右
ramdom      //隨機
}

enum TransitionCurve : Int {
case Default = 0,   //默認
EaseIn,      //緩進
EaseOut,     //緩出
EaseInEaseOut,    //緩進緩出
Linear,      //線性
Ramdom      //隨機
}

上面三個枚舉類型分別代表:

  • TransitionAnimType:動畫類型
  • TransitionSubType:動畫方向
  • TransitionCurve:動畫曲線

第二步 自定義函數返回動畫類型


/// 返回動畫類型
private func animationType(animType: TransitionAnimType) -> String {
 /// 設置轉場動畫類型
 let animTypeArray = ["fade", "push", "reveal", "moveIn", "cube", "suckEffect", "oglFlip", "rippleEffect", "pageCurl", "pageUnCurl", "cameraIrisHollowOpen", "cameraIrisHollowClose", "curlDown", "curlUp", "flipFromLeft", "flipFromRight", "ramdom"]
 return objectFromDataSource(array: animTypeArray, index: animType.rawValue, isRamdom: (TransitionAnimType.ramdom == animType)) as! String
}

第三步 自定義函數返回動畫方向


/// 返回動畫方向
private func animationSubType(subType: TransitionSubType) -> String {
 let animSubTypeArray = [kCATransitionFromTop, kCATransitionFromLeft, kCATransitionFromBottom, kCATransitionFromRight]
 return objectFromDataSource(array: animSubTypeArray, index: subType.rawValue, isRamdom: (TransitionSubType.ramdom == subType)) as! String
}

第四步 自定義函數返回動畫曲線


/// 返回動畫曲線
private func animationCurve(curve: TransitionCurve) -> String {
 let animCurveArray = [kCAMediaTimingFunctionDefault, kCAMediaTimingFunctionEaseIn, kCAMediaTimingFunctionEaseOut, kCAMediaTimingFunctionEaseInEaseOut, kCAMediaTimingFunctionLinear]
 return objectFromDataSource(array: animCurveArray, index: curve.rawValue, isRamdom: (TransitionCurve.Ramdom == curve)) as! String
}

第五步 不難發現,上面三個自定義方法中我們都用到了objectFromDataSource這個方法,從我們的傳參不難發現,它就是為了返回我們需要的指定數據的,下面我們來實現一下這個方法


/// 統一從數據返回對象
private func objectFromDataSource(array: Array<Any>, index: Int, isRamdom: Bool) -> AnyObject {
 let count = array.count
 let i = isRamdom ? Int(arc4random_uniform(UInt32(count))) : index

 return array[i] as AnyObject
}

第六步 好了,現在所有的準備工作已經做好,接下來我們來看一下具體的動畫實現的方法


func layerTransition(animTye: TransitionAnimType, subType: TransitionSubType, curve: TransitionCurve, duration: CGFloat, layer: CALayer) {
let key = "transition"
if layer.animation(forKey: key) != nil {
 layer.removeAnimation(forKey: key)
}
let transition = CATransition()

/// 動畫時長
transition.duration = CFTimeInterval(duration)

/// 動畫類型
transition.type = animationType(animType: animTye)

/// 動畫方向
transition.subtype = animationSubType(subType: subType)

/// 緩動函數
transition.timingFunction = CAMediaTimingFunction(name: animationCurve(curve: curve))

/// 完成動畫刪除
transition.isRemovedOnCompletion = true

layer.add(transition, forKey: key)

}

大功告成!接下來我們去需要使用動畫的地方來調取我們第六步實現的方法就好了。so easy !哈哈


layerTransition(animTye: .ramdom, subType: .ramdom, curve: .Ramdom, duration: 2.0, layer: (self.view.window?.layer)!)

是不是感覺很簡單呢,上面的代碼組合一下就可以直接用嘍,有需要的拿走不謝~~

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對html5模板網的支持。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要給大家介紹了關于RxSwift學習教程之類型對象Subject的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于RxSwift學習教程之Observable的相關資料,文中詳細的給大家介紹了關于新建Observable、訂閱Observable和取消訂閱并消除內存泄漏等相關的內容,需要的朋友可以
RxSwift是Swift函數響應式編程的一個開源庫,由Github的ReactiveX組織開發,維護。下面這篇文章主要給大家介紹了關于RxSwift學習之基礎篇的相關資料,文中通過示例代碼介紹的非常詳細,需
這篇文章主要為大家詳細介紹了Swift4.0 Array數組的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
近日,iPhone X的發布在人們群眾引起了很大的轟動,下面這篇文章主要給大家介紹了關于利用Swift如何判斷iPhone X機型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
下面小編就為大家帶來一篇詳談swift內存管理中的引用計數。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 欧美激情精品久久久久久 | 欧美高清一区 | 91亚洲国产成人久久精品网站 | 午夜精品一区二区三区在线观看 | 午夜看电影在线观看 | 国产91视频免费 | 国产精品免费一区二区三区四区 | 一区在线视频 | 久久久久久综合 | 亚洲一区二区中文字幕 | 日本a视频 | 激情五月综合 | 天堂综合| 91精品91久久久 | 精品一区二区三区中文字幕 | 免费中文字幕日韩欧美 | 国产 日韩 欧美 中文 在线播放 | 中文字幕亚洲欧美日韩在线不卡 | 一区二区视频在线 | 国产精品福利在线 | 久久久久久久久久久久久久av | 怡红院免费的全部视频 | 欧美日韩亚洲在线 | 99资源站| 久久精品国产免费 | 狠狠久 | 91短视频网址 | 国产午夜精品一区二区三区嫩草 | 激情五月激情综合网 | 欧美电影在线观看网站 | 亚洲视频在线看 | 91精品久久久久久久久久入口 | 在线视频一区二区 | 成人在线视频观看 | 91精品国产91久久久久久丝袜 | 黄色在线观看网址 | 精品入口麻豆88视频 | 亚洲 欧美 精品 | 欧美日韩精品亚洲 | 国产高清在线精品一区二区三区 | 精品日本中文字幕 |