pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

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

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

前言

最近因為工作的需要,打算用swift重構(gòu)現(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,     //翻轉(zhuǎn)
rippleEffect,    //波紋
pageCurl,     //翻頁
pageUnCurl,     //反翻頁
cameraIrisHollowOpen,  //開鏡頭
cameraIrisHollowClose,  //關(guān)鏡頭
curlDown,     //下翻頁
curlUp,      //上翻頁
flipFromLeft,    //左翻轉(zhuǎn)
flipFromRight,    //右翻轉(zhuǎn)
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 {
 /// 設(shè)置轉(zhuǎn)場動畫類型
 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)

}

大功告成!接下來我們?nèi)バ枰褂脛赢嫷牡胤絹碚{(diào)取我們第六步實現(xiàn)的方法就好了。so easy !哈哈


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

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

總結(jié)

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

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

相關(guān)文檔推薦

這篇文章主要給大家介紹了關(guān)于RxSwift學習教程之類型對象Subject的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于RxSwift學習教程之Observable的相關(guān)資料,文中詳細的給大家介紹了關(guān)于新建Observable、訂閱Observable和取消訂閱并消除內(nèi)存泄漏等相關(guān)的內(nèi)容,需要的朋友可以
RxSwift是Swift函數(shù)響應式編程的一個開源庫,由Github的ReactiveX組織開發(fā),維護。下面這篇文章主要給大家介紹了關(guān)于RxSwift學習之基礎(chǔ)篇的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需
這篇文章主要為大家詳細介紹了Swift4.0 Array數(shù)組的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
近日,iPhone X的發(fā)布在人們?nèi)罕娨鹆撕艽蟮霓Z動,下面這篇文章主要給大家介紹了關(guān)于利用Swift如何判斷iPhone X機型的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
下面小編就為大家?guī)硪黄斦剆wift內(nèi)存管理中的引用計數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 真空上料机(一种真空输送机)-百科 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 预制直埋蒸汽保温管-直埋管道-聚氨酯发泡保温管厂家 - 唐山市吉祥保温工贸有限公司 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 洗地机-全自动/手推式洗地机-扫地车厂家_扬子清洁设备 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 网络推广公司_网络营销方案策划_企业网络推广外包平台-上海澜推网络 | 浩方智通 - 防关联浏览器 - 跨境电商浏览器 - 云雀浏览器 | 乙炔气体报警装置|固定式氯化氢检测仪|河南驰诚电气百科 | 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 | 掺铥光纤放大器-C/L波段光纤放大器-小信号光纤放大器-合肥脉锐光电技术有限公司 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 防爆电机生产厂家,YBK3电动机,YBX3系列防爆电机,YBX4节防爆电机--河南省南洋防爆电机有限公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 恒温恒湿试验箱_高低温试验箱_恒温恒湿箱-东莞市高天试验设备有限公司 | 铝合金线槽_铝型材加工_空调挡水板厂家-江阴炜福金属制品有限公司 | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | AGV叉车|无人叉车|AGV智能叉车|AGV搬运车-江西丹巴赫机器人股份有限公司 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 |