亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人av在线播放| 久久亚洲一区二区三区四区五区高| 国产精品第一第二| 91视频国产一区| 91精品国产综合久久久久久蜜臀| 欧美成人午夜剧场免费观看| 国产精品久久久久999| 最近2019中文字幕大全第二页| 国产xxx69麻豆国语对白| 色爱av美腿丝袜综合粉嫩av| 91超碰中文字幕久久精品| 亚洲激情中文字幕| 91大神福利视频在线| 亚洲高清久久网| 清纯唯美日韩制服另类| 在线观看91久久久久久| 精品国产一区久久久| 91中文字幕在线观看| 欧美黑人国产人伦爽爽爽| 热久久美女精品天天吊色| 亚洲韩国日本中文字幕| 国产日韩综合一区二区性色av| 成人激情免费在线| 亚洲专区中文字幕| 亚洲社区在线观看| 大胆人体色综合| 91亚洲va在线va天堂va国| 亚洲欧美中文日韩v在线观看| 最新的欧美黄色| 久久久久亚洲精品国产| 亚洲伦理中文字幕| 色与欲影视天天看综合网| 日韩美女av在线| 美女av一区二区| 中文国产成人精品久久一| 成人亚洲欧美一区二区三区| 九九热r在线视频精品| 欧美一二三视频| 欧美日韩日本国产| 国产日产欧美精品| 欧美亚洲免费电影| 性亚洲最疯狂xxxx高清| 97在线视频免费| 国产精品激情自拍| 国产欧美日韩专区发布| 亚洲黄色av女优在线观看| 欧美在线免费看| 中文字幕在线看视频国产欧美| 国产精品一二区| 色综合色综合久久综合频道88| 欧美日韩加勒比精品一区| 97精品国产97久久久久久春色| 亚洲自拍偷拍网址| 永久免费看mv网站入口亚洲| 一区二区三区视频观看| 日韩a**中文字幕| 亚洲最新av在线网站| 成人免费福利视频| 欧美视频中文字幕在线| 亚洲性无码av在线| 国产精品入口免费视频一| 最好看的2019的中文字幕视频| 亚洲欧美日韩中文在线| 最好看的2019的中文字幕视频| 欧美极品第一页| 国产精品久久一区| 91久久久久久久久久久久久| 亚洲人午夜色婷婷| 亚洲级视频在线观看免费1级| 国产精品美女久久| 丝袜亚洲另类欧美重口| 中文字幕久久久| 992tv成人免费影院| 中文字幕综合一区| 日韩女优人人人人射在线视频| 久久九九热免费视频| 日韩精品www| 亚洲自拍欧美另类| 日韩性生活视频| 久久综合伊人77777| 亚洲一区国产精品| 成人国内精品久久久久一区| 日韩成人av网址| 欧美日韩国产精品| 91精品久久久久久久久久久| 91香蕉嫩草神马影院在线观看| 97香蕉超级碰碰久久免费软件| 久久免费视频在线观看| 久久av中文字幕| 久久综合久久88| 久久久女女女女999久久| 中文字幕在线观看亚洲| 午夜精品久久久久久99热| 九九久久综合网站| 欧美在线www| 国产91av在线| 亚洲男人第一网站| 九九热精品在线| 日韩成人av在线| 亚洲精品98久久久久久中文字幕| 国产日韩在线精品av| 亚洲精品永久免费精品| 一本色道久久综合狠狠躁篇怎么玩| 九九精品视频在线观看| 欧美午夜视频在线观看| 成人黄色免费在线观看| 欧美一区二区.| 色黄久久久久久| 97国产真实伦对白精彩视频8| 色av吧综合网| 精品在线欧美视频| 国模精品系列视频| 亚洲小视频在线| 国产热re99久久6国产精品| 国产成人精品优优av| 2019最新中文字幕| 亚洲欧美综合图区| 疯狂做受xxxx高潮欧美日本| 亚洲精品一区二区三区不| 91夜夜揉人人捏人人添红杏| 国产精品主播视频| 91牛牛免费视频| 91av成人在线| 自拍偷拍亚洲欧美| 成人免费黄色网| 日韩激情视频在线播放| 亚洲精品自拍第一页| 国产91精品不卡视频| 成人在线精品视频| 国产精品久久久久久婷婷天堂| 91天堂在线视频| 欧美亚洲国产视频小说| 亚洲jizzjizz日本少妇| 日韩中文字幕久久| 国产精品专区一| 国产精品v日韩精品| 国产精品自产拍在线观| 91高清视频在线免费观看| 国产精品久久久久久亚洲影视| 国产在线日韩在线| 久久精品国产精品| 欧美黑人xxxⅹ高潮交| 日韩中文在线不卡| 国产伦精品免费视频| 亚洲欧美国产另类| 一色桃子一区二区| 日本精品免费一区二区三区| 亚洲免费影视第一页| 国产日韩av在线播放| 亚洲福利视频网| www.久久草.com| 久久久久久中文| 视频在线观看一区二区| 亚洲视频999| www.欧美精品| 国外成人在线直播| 911国产网站尤物在线观看| 成人在线播放av| 亚洲精品按摩视频| 91免费人成网站在线观看18| 久久国产精品久久久久久| 日韩中文字幕在线| 国产美女精品视频| 亚洲欧美日韩久久久久久|