最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Swift實現(xiàn)各類的CATransition動畫詳解

 更新時間:2017年09月18日 11:51:25   作者:laona  
CATransition動畫主要在過渡時使用,比如兩個頁面層級改變的時候添加一個轉場效果。CATransition分為兩類,一類是公開的動畫效果,一類是非公開的動畫效果。這篇文章主要給大家介紹了關于如何利用Swift實現(xiàn)各類CATransition動畫的相關資料,需要的朋友可以參考下。

前言

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

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

第一步 創(chuàng)建一個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:動畫曲線

第二步 自定義函數(shù)返回動畫類型

/// 返回動畫類型
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
}

第三步 自定義函數(shù)返回動畫方向

/// 返回動畫方向
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
}

第四步 自定義函數(shù)返回動畫曲線

/// 返回動畫曲線
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
}

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

/// 統(tǒng)一從數(shù)據(jù)返回對象
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
}

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

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)

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

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

layer.add(transition, forKey: key)

}

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

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

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

總結

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

相關文章

  • Swift中字典與JSON轉換的方法

    Swift中字典與JSON轉換的方法

    Swift中經(jīng)常會遇到字典和字符串的相互轉換,本篇文章主要介紹了Swift中字典與JSON轉換的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Swift5中fileprivate與private的差別淺析

    Swift5中fileprivate與private的差別淺析

    這篇文章主要給大家介紹了關于Swift5中fileprivate與private的差別的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Swift5具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • Swift 3.0基礎學習之閉包

    Swift 3.0基礎學習之閉包

    Swift引進了閉包的概念,這個與object-c的block類似,使用過block的話都知道有多方便,所以開始學Swift,先要把閉包學會,后面使用會很頻繁。下面這篇文章主要介紹了Swift 3.0基礎學習之閉包的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • 詳解Swift編程中的常量和變量

    詳解Swift編程中的常量和變量

    這篇文章主要介紹了Swift編程中的常量和變量,是Swift入門學習中的基礎知識,需要的朋友可以參考下
    2015-11-11
  • Swift之UITabBarController 導航控制器的自定義

    Swift之UITabBarController 導航控制器的自定義

    本文給大家介紹swift導航控制器之UITabBarController,本文通過代碼實例給大家講解swift導航控制器,導航控制器類繼承UITabBarController,代碼簡單易懂,需要的朋友可以參考下
    2015-10-10
  • Swift中通知中心(NotificationCenter)的使用示例

    Swift中通知中心(NotificationCenter)的使用示例

    這篇文章主要給大家介紹了關于Swift中通知中心(NotificationCenter)使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • Swift算法實現(xiàn)字符串轉數(shù)字的方法示例

    Swift算法實現(xiàn)字符串轉數(shù)字的方法示例

    最近學完了swift想著實踐下,就通過一些簡單的算法進行學習研究,下面這篇文章主要介紹了Swift算法實現(xiàn)字符串轉數(shù)字的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • swift內存管理指針類型使用實例詳解

    swift內存管理指針類型使用實例詳解

    這篇文章主要為大家介紹了swift內存管理指針類型使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 詳解Swift的switch...case語句中break關鍵字的用法

    詳解Swift的switch...case語句中break關鍵字的用法

    這篇文章主要介紹了Swift的switch...case語句中break關鍵字的用法,是Swift入門學習中的基礎知識,需要的朋友可以參考下
    2016-04-04
  • 深入講解Swift的內存管理

    深入講解Swift的內存管理

    不管在什么語言里,內存管理的內容都很重要,Swift使用自動引用計數(shù)來管理應用程序的內存使用。這表示內存管理已經(jīng)是Swift的一部分,在大多數(shù)情況下,你并不需要考慮內存的管理。本文主要介紹了Swift中內存管理的相關資料,需要的朋友可以參考。
    2017-03-03

最新評論

斗六市| 个旧市| 浮山县| 福州市| 辰溪县| 增城市| 多伦县| 柳江县| 彰化市| 罗定市| 朝阳市| 公安县| 白银市| 怀集县| 浦东新区| 和政县| 青岛市| 南江县| 阿克陶县| 岑巩县| 定西市| 玉树县| 九江市| 罗源县| 乌兰察布市| 淳安县| 连城县| 开鲁县| 泾源县| 柘荣县| 杂多县| 尉氏县| 张家界市| 镇江市| 新竹市| 昌黎县| 保山市| 龙游县| 尼勒克县| 霍城县| 大埔县|