最近研究了一下,Swift语言中关于Animation动画的实现学习,分两次进行相关内容的讲解

用表格列出各种动画情况

Demo首页显示展示了一种动画显示方式,代码如下:

//绘画装饰
    func drawDecorate(){
        //画出小圆
        let smallCenterPoint = CGPointMake(50, 50);
        let smallRadiusFloat:CGFloat = sqrt(800);
        let smallMaskPath = UIBezierPath.init(ovalInRect: CGRectInset(CGRectMake(smallCenterPoint.x, smallCenterPoint.y, 1, 1), -smallRadiusFloat, -smallRadiusFloat));
        
        //画出大圆
        let largeCenterPoint = CGPointMake(50, 50);
        let largeRadiusFloat = sqrt(pow(view.bounds.width-largeCenterPoint.x, 2)+pow(view.bounds.height-largeCenterPoint.y, 2));
        let largerMaskPath = UIBezierPath.init(ovalInRect: CGRectInset(CGRectMake(largeCenterPoint.x, largeCenterPoint.y, 1, 1), -largeRadiusFloat, -largeRadiusFloat));
        
        //表层图画
        let maskLayer = CAShapeLayer();
        maskLayer.path = largerMaskPath.CGPath;
        view.layer.mask = maskLayer;
        
        //基础动画
        let baseAnimation = CABasicAnimation.init(keyPath: "path");
        baseAnimation.duration = 0.5;
        baseAnimation.fromValue = smallMaskPath.CGPath;
        baseAnimation.toValue = largerMaskPath.CGPath;
        baseAnimation.delegate = self;
        maskLayer.addAnimation(baseAnimation, forKey: "path");
        
    }

然后今天说明的是:1:点击进行滑动动画;2:点击进行两次动画效果;3:基本动画;4:键值动画;5:转场动画

部分代码:

1:点击进行滑动动画;

(可以添加渐变效果)
    //# MARK:- 用UIView.animateWithDuration实现更逼真的运动效果
    func view1Clicked(tapGesture:UITapGestureRecognizer){
        //view1动画,向左移动100
        let theView = tapGesture.view!
        //usingSpringWithDamping 阻尼,范围0-1,阻尼越接近于0,弹性效果越明显
        UIView.animateWithDuration(0.2, delay: 0, usingSpringWithDamping: 0.9, initialSpringVelocity: 1, options: UIViewAnimationOptions.CurveEaseIn, animations: { () -> Void in
            theView.frame = CGRect(x: theView.frame.origin.x+100, y: theView.frame.origin.y, width: theView.frame.size.width, height: theView.frame.height)
            }, completion: nil)
    }

2:点击进行两次动画效果;

//CATransaction 配置隐式动画
    func view1Clicked(tapGesture:UITapGestureRecognizer){
        
        CATransaction.begin()
        //CATranscation 属性
        //设置动画执行时间
        CATransaction.setAnimationDuration(1)
        //关闭隐式动画,这句话必须放在修改属性之前
        //        CATransaction.setDisableActions(true)
        //设置动画完成后的回调
        CATransaction.setCompletionBlock { () -> Void in
            NSLog("Animation complete")
        }
      
        CATransaction.setAnimationDuration(1)
        self.myLayer.backgroundColor = UIColor.greenColor().CGColor
        self.myLayer.opacity = 0.5
        var moveToPoint  = CGPoint(x: myLayer.position.x + 150, y: myLayer.position.y + 50)
        if(moveToPoint.x > view.frame.size.width) { moveToPoint.x -= view.frame.size.width}
        if(moveToPoint.y > view.frame.size.height) { moveToPoint.y -= view.frame.size.height}
        self.myLayer.position = moveToPoint
        
        
        CATransaction.commit()
        performSelector(#selector(TwoDonghuaViewController.pause), withObject: nil, afterDelay: 0.2)
        
    }

3:基本动画;

//移动
    func move(theView:UIView){
        /*
         可选的KeyPath
         transform.scale = 比例轉換
         transform.scale.x
         transform.scale.y
         transform.rotation = 旋轉
         transform.rotation.x
         transform.rotation.y
         transform.rotation.z
         transform.translation
         transform.translation.x
         transform.translation.y
         transform.translation.z
         
         opacity = 透明度
         margin
         zPosition
         backgroundColor 背景颜色
         cornerRadius 圆角
         borderWidth
         bounds
         contents
         contentsRect
         cornerRadius
         frame
         hidden
         mask
         masksToBounds
         opacity
         position
         shadowColor
         shadowOffset
         shadowOpacity
         shadowRadius
         
         */
        let baseAnimation = CABasicAnimation(keyPath: "position")
        //baseAnimation.fromValue 初始位置,如果不设就是当前位置
        let endPoint = CGPoint(x: theView.layer.position.x+100, y: theView.layer.position.y)
        baseAnimation.toValue = NSValue(CGPoint:endPoint)//绝对位置
        //baseAnimation.byValue = NSValue(CGPoint:CGPoint(x: 100, y: 0))//相对位置
        //动画其他属性
        baseAnimation.duration = 0.2
        baseAnimation.repeatCount = 1
        baseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)//加速运动
        //baseAnimation.timingFunction = CAMediaTimingFunction(controlPoints: 0.5, 0, 0.9, 0.7)//自定义加速的曲线参数
        
        //这两个属性若不设置,动画执行后回复位
        baseAnimation.removedOnCompletion = false
        baseAnimation.fillMode = kCAFillModeForwards
        
        baseAnimation.delegate = self
        //可以在动画中缓存一些
        baseAnimation.setValue(NSValue(CGPoint: endPoint), forKey: "endPoint")
        baseAnimation.setValue(theView, forKey: "sender")
        
        //开始动画
        theView.layer.addAnimation(baseAnimation, forKey: "theViewMoveRight100")
    }

4:键值动画

func imageViewClicked(tapGesture:UITapGestureRecognizer){
        //键值动画
        //keyPath和basicAnimation的类型相同,@see BasicAnimationViewController.swift
        let keyframeAnimation = CAKeyframeAnimation(keyPath: "position")
        //弧线位置移动
        let path = CGPathCreateMutable()
        CGPathMoveToPoint(path, nil, 50, 50)
        CGPathAddCurveToPoint(path, nil, 50, 50, 700, 300, 30, 500)
        keyframeAnimation.path = path
        keyframeAnimation.calculationMode = kCAAnimationLinear
        
        //设置其他属性
        keyframeAnimation.duration = 1.0;
        //        keyframeAnimation.beginTime = CACurrentMediaTime() + 2;//设置延迟2秒执行
        tapGesture.view?.layer.addAnimation(keyframeAnimation, forKey: "keyframeAnimation1")
        tapGesture.view?.layer.presentationLayer()
        tapGesture.view?.layer.modelLayer()
    }

5:转场动画

func swipeTransition(subtype:String)->CATransition{
        let transfer = CATransition()
        /*
         kCATransitionFade:淡入淡出,默认效果
         kCATransitionMoveIn:新视图移动到就是图上方
         kCATransitionPush:新视图推开旧视图
         kCATransitionReveal:移走旧视图然后显示新视图
         
         //苹果未公开的私有转场效果
         cube:立方体
         suckEffect:吸走的效果
         oglFlip:前后翻转效果
         rippleEffect:波纹效果
         pageCurl:翻页起来
         pageUnCurl:翻页下来
         cameraIrisHollowOpen:镜头开
         cameraIrisHollowClose:镜头关
         */
        let types = [kCATransitionFade,kCATransitionMoveIn,kCATransitionPush,kCATransitionReveal,"cube","suckEffect","oglFlip","rippleEffect","pageCurl","pageUnCurl","cameraIrisHollowOpen","cameraIrisHollowClose"]
        let type = types[Int(arc4random()%11)]
        transfer.type = type
        NSLog("动画类型。。。。%@", type)
        transfer.subtype = subtype
        transfer.duration = 1
        return transfer
    }

源代码:http://download.csdn.net/detail/hbblzjy/9647803,敬请关注,(感觉不错,想要代码的,请留言或关注我)。。。

Swift基础之Animation动画研究的更多相关文章

  1. 【Android 基础】Animation 动画介绍和实现

    在前面PopupWindow 实现显示仿腾讯新闻底部弹出菜单有用到Animation动画效果来实现菜单的显示和隐藏,本文就来介绍下吧. 1.Animation 动画类型 Android的animati ...

  2. Swift 实现iOS Animation动画教程

    这是一篇翻译文章.原文出处:http://www.raywenderlich.com/95910/uiview-animation-swift-tutorial 动画( animation)是iOS用 ...

  3. android动画效果编程基础--Android Animation

    动画效果编程基础--Android Animation 动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 tran ...

  4. 转 iOS Core Animation 动画 入门学习(一)基础

    iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...

  5. Android物业动画研究(Property Animation)彻底解决具体解释

     前p=1959">Android物业动画研究(Property Animation)全然解析具体解释上已经基本展示了属性动画的核心使用方法: ObjectAnimator实现动画 ...

  6. Android基础夯实--重温动画(二)之Frame Animation

    心灵鸡汤:天下事有难易乎,为之,则难者亦易矣:不为,则易者亦难矣. 摘要 当你已经掌握了Tween Animation之后,再来看Frame Animation,你就会顿悟,喔,原来Frame Ani ...

  7. Android基础夯实--重温动画(三)之初识Property Animation

    每个人都有一定的理想,这种理想决定着他的努力和判断的方向.就在这个意义上,我从来不把安逸和快乐看作生活目的的本身--这种伦理基础,我叫它猪栏的理想.--爱因斯坦 一.摘要 Property Anima ...

  8. Android基础夯实--重温动画(一)之Tween Animation

    心灵鸡汤:真正成功的人生,不在于成就的大小,而在于你是否努力地去实现自我,喊出自己的声音,走出属于自己的道路. 摘要 不积跬步,无以至千里:不积小流,无以成江海.学习任何东西我们都离不开扎实的基础知识 ...

  9. Android基础夯实--重温动画(五)之属性动画 ObjectAnimator详解

    只有一种真正的英雄主义 一.摘要 ObjectAnimator是ValueAnimator的子类,它和ValueAnimator一样,同样具有计算属性值的功能,但对比ValueAnimator,它会更 ...

随机推荐

  1. 【BZOJ2243】【SDOI2011】染色

    题意见试题传送门 解题思路:显然是题树剖题. 考虑用线段树维护区间端点颜色与颜色数,这样就可以方便的合并,注意查询的时候对端点的特殊处理即可. 时间效率最高为\( O (m \log^{2} n) \ ...

  2. ●UVA 10674 Tangents

    题链: https://vjudge.net/problem/UVA-10674 题解: 计算几何,求两个圆的公切线. <算法竞赛入门经典——训练指南>P266,讲得很清楚的. 大致是分为 ...

  3. 2015 多校联赛 ——HDU5375(dp)

    Sample Input 2 00?0 1 2 4 8 ???? 1 2 4 8   Sample Output Case #1: 12 Case #2: 15 ?部分可以是0  or  1,将二进制 ...

  4. Codeforces Round #430 D. Vitya and Strange Lesson

    Today at the lesson Vitya learned a very interesting function - mex. Mex of a sequence of numbers is ...

  5. 5分钟快速打造WebRTC视频聊天

    百度一下WebRTC,我想也是一堆.本以为用这位朋友( 搭建WebRtc环境 )的SkyRTC-demo 就可以一马平川的实现聊天,结果折腾了半天,文本信息都发不出去,更别说视频了.于是自己动手. 想 ...

  6. AD域中添加了一个策略导致的问题

    AD域中添加了一个策略,导致浏览器报了一个错,点击下拉菜单选不了.查了资料说是添加信任站点就好,结果信任站点是置灰的,服务器有这个问题,本地是好的. 解决办法:本地服务器有个ie增强设置,关掉就好.

  7. 华科机考:a+b

    时间限制:1秒     空间限制:32768K 题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据 ...

  8. 如何使用 TeamViewer 配置QuickConnect按钮?

    QuickConnect作为TeamViewer中一个比较重要的部分,得到了很多用户的认可.那么在实际运用中,怎么才能设置网页或单个程序的QuickConnect呢?所以小编以此问题为例,教大家如何配 ...

  9. Optaplanner逐步学习(0) : 基本概念 - Optaplanner,规划问题, 约束,方案

    之前的文章中,分别从APS,排产到规划引擎叙述了一些理论基础:并介绍了一些Optaplanner大概的情况:并一步步将Optaplanner的示例运行起来,将示例源码导进Eclipse分析了一下它的H ...

  10. javascript面向对象(给对象添加属性和方法的方式)

    1.在定义对象时,直接把属性和方法添加 <script type="text/JavaScript"> //给对象直接在定义时添加属性和方法         var g ...