麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Swift > 正文

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

2020-03-09 17:44:29
字體:
來源:轉載
供稿:網友

前言

最近因為工作的需要,打算用swift/172288.html">swift/238953.html">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 = truelayer.add(transition, forKey: key)}

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

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

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

總結

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


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品久久久一二三区播放播放播放视频 | 国产精品久久久久网站 | 久久久久久久久久久久久九 | 91精品欧美一区二区三区 | 成人青青草 | 12av毛片| 欧美人与牲禽动交精品一区 | hd性videos意大利复古 | 一区二区三高清 | 国产高潮好爽受不了了夜色 | 黄色毛片一级 | 本站只有精品 | 久草在线资源福利站 | 欧美顶级毛片在线播放小说 | 香蕉久草视频 | 精品国产91久久久久久久妲己 | 福利在线影院 | 久久免费精品视频 | 久久久久久久久久久久久久国产 | 斗罗破苍穹在线观看免费完整观看 | 免费观看黄视频 | 免费一级欧美大片视频 | 午夜视频你懂的 | 4480午夜 | 手机黄色小视频 | 久久999精品久久久 国产噜噜噜噜久久久久久久久 | 久久久国产精品网站 | 精品无吗乱吗av国产爱色 | 黄色男女视频 | 免费毛片观看 | 国产在线欧美日韩 | free japan xxxxhdsex69 | 91av在线免费播放 | 欧美在线观看视频一区 | 福利在线国产 | 国产一级免费不卡 | 一级电影在线观看 | 春光影院理论片 | 精品亚洲在线 | 亚洲精品免费播放 | 日本成人在线免费 |