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)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 【连江县榕彩涂料有限公司】官方网站 | 庭院灯_太阳能景观灯_草坪灯厂家_仿古壁灯-重庆恒投科技 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 色谱柱-淋洗液罐-巴罗克试剂槽-巴氏吸管-5ml样品瓶-SBS液氮冻存管-上海希言科学仪器有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 快速门厂家-快速卷帘门-工业快速门-硬质快速门-西朗门业 | 数控走心机-走心机价格-双主轴走心机-宝宇百科| 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 诗词大全-古诗名句 - 古诗词赏析| 乙炔气体报警装置|固定式氯化氢检测仪|河南驰诚电气百科 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 板式换热器_板式换热器价格_管式换热器厂家-青岛康景辉 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 间苯二酚,间苯二酚厂家-淄博双和化工 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 |