虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Swift编程 > 利用Swift实现各类的CATransition动画详解

利用Swift实现各类的CATransition动画详解
类别:Swift编程   作者:码皇   来源:互联网   点击:

CATransition动画主要在过渡时使用,比如两个页面层级改变的时候添加一个转场效果。CATransition分为两类,一类是公开的动画效果,一类是非公开的动画效果。这篇文章主要给大家介绍了关于如何利用Swift实现各类CATransition动画的相关资料,需要的朋友可以参考下。

前言

最近因为工作的需要,打算用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)!)

是不是感觉很简单呢,上面的代码组合一下就可以直接用喽,有需要的拿走不谢~~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关热词搜索: swift catransition swift 动画 swift 动画