zoukankan      html  css  js  c++  java
  • 分析一个炫酷动画

    本文摘自http://www.cocoachina.com/ios/20160620/16763.html,本人只是跟敲一遍然后做笔记备忘。

    展示圆形图层

    1、动画的最开始是一个圆形图层,首先创建一个圆形视图,继承自CAShapeLayer:

    class CircleLayer: CAShapeLayer {
        // MARK: 属性
        let animationDuration: CFTimeInterval = 0.3
        
        // 开始圆形路径
        var beginCirclePath: UIBezierPath {
            return UIBezierPath(ovalInRect: CGRect(x: 50.0, y: 50.0,  0, height: 0))
        }
        
        // 扩大的圆形路径
        var endCirclePath: UIBezierPath {
            return UIBezierPath(ovalInRect: CGRect(x: 2.5, y: 17.5,  95.0, height: 95.0))
        }
        
        override init() {
            super.init()
            // 设置自身的填充颜色。
            self.fillColor = UIColor(red: 221.0 / 255.0, green: 108.0 / 255.0, blue: 217.0 / 255.0, alpha: 1.0).CGColor
            self.path = beginCirclePath.CGPath
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        /**
         扩大动画
         */
        func expand() {
            let animation = CABasicAnimation(keyPath: "path")
            animation.fromValue = beginCirclePath.CGPath
            animation.toValue = endCirclePath.CGPath
            animation.fillMode = kCAFillModeForwards
            animation.removedOnCompletion = false
            animation.duration = animationDuration
            self.addAnimation(animation, forKey: nil)
        }
    }

     2、创建一个Animation视图:

    class AnimationView: UIView {
        // MARK: 属性
        let circle = CircleLayer()
        
        override init(frame: CGRect) {
            super.init(frame: frame)
            backgroundColor = UIColor.clearColor()
            // 添加圆形图层
            addCircleLayer()
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        // MARK: 添加图形
        func addCircleLayer() {
            self.layer.addSublayer(circle)
            // 执行扩张动画
            circle.expand()
        }
    }

     3、在ViewController中添加AnimationView:

    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)
            
            addAnimationView()
        }
    
        func addAnimationView() {
            let size: CGFloat = 100.0
            let screenSize = UIScreen.mainScreen().bounds.size
            let animationView = AnimationView(frame: CGRect(x: screenSize.width / 2 - size / 2, y: screenSize.height / 2 - size / 2,  size, height: size))
            view.addSubview(animationView)
        }
    }
    

     至此为止ViewController上就会出现一个圆形的图层,最基本的操作到此为止。

    抖动动画

    1、在圆形图层中添加几个属性和一个动画方法:

        // 横向拉伸
        var circleVerticalSquishPath: UIBezierPath {
            return UIBezierPath(ovalInRect: CGRect(x: 2.5, y: 20.0,  95.0, height: 90.0))
        }
        
        // 纵向拉伸
        var circleHorizontalSquishPath: UIBezierPath {
            return UIBezierPath(ovalInRect: CGRect(x: 5.0, y: 17.5,  90.0, height: 90.0))
        }
    
        /**
         抖动动画
         */
        func wobbleAnimate() {
            let animation1 = CABasicAnimation(keyPath: "path")
            animation1.fromValue = endCirclePath.CGPath
            animation1.toValue = circleVerticalSquishPath.CGPath
            animation1.beginTime = 0.0
            animation1.duration = animationDuration
            
            let animation2 = CABasicAnimation(keyPath: "path")
            animation2.fromValue = circleVerticalSquishPath.CGPath
            animation2.toValue = circleHorizontalSquishPath.CGPath
            animation2.beginTime = animation1.beginTime + animation1.duration
            animation2.duration = animationDuration
            
            let animation3 = CABasicAnimation(keyPath: "path")
            animation3.fromValue = circleHorizontalSquishPath.CGPath
            animation3.toValue = circleVerticalSquishPath.CGPath
            animation3.beginTime = animation2.beginTime + animation2.duration
            animation3.duration = animationDuration
            
            let animation4 = CABasicAnimation(keyPath: "path")
            animation4.fromValue = circleVerticalSquishPath.CGPath
            animation4.toValue = endCirclePath.CGPath
            animation4.beginTime = animation3.beginTime + animation3.duration
            animation4.duration = animationDuration
            
            let animationGroup = CAAnimationGroup()
            animationGroup.animations = [animation1, animation2, animation3, animation4]
            animationGroup.duration = 4 * animationDuration
            animationGroup.repeatCount = 2
            addAnimation(animationGroup, forKey: nil)
        }
    

     2、在AnimationView中调用上面新添加的动画方法,但是要注意需要等放大动画执行完毕后。修改addCircleLayer方法:

        // MARK: 添加图形
        func addCircleLayer() {
            self.layer.addSublayer(circle)
            // 执行扩张动画
            circle.expand()
            // 这里需要用到计时器,以防两个动画一起执行
            NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: #selector(AnimationView.wobbleCircleLayer), userInfo: nil, repeats: false)
        }
        
        func wobbleCircleLayer() {
            circle.wobbleAnimate()
        }
    

    圆形边缘突出动画

    分析:其实是一个三角形的三个角逐个拉伸产生的效果

    1、先创建一个三角形图层:

    class TriangleLayer: CAShapeLayer {
        // 距离大三角形的距离
        let paddingSpace: CGFloat = 30.0
        
        // 小三角形路径
        var smallTrianglePath: UIBezierPath {
            let smallPath = UIBezierPath()
            smallPath.moveToPoint(CGPoint(x: 5.0 + paddingSpace, y: 95.0))
            smallPath.addLineToPoint(CGPoint(x: 50.0, y: 12.5 + paddingSpace))
            smallPath.addLineToPoint(CGPoint(x: 95.0 - paddingSpace, y: 95.0))
            smallPath.closePath()
            return smallPath
        }
        
        override init() {
            super.init()
            let color = UIColor(red: 221.0 / 255.0, green: 108.0 / 255.0, blue: 217.0 / 255.0, alpha: 1.0).CGColor
            // 设置填充色
            fillColor = color
            // 设置线条颜色
            strokeColor = color
            // 设置线条粗细
            lineWidth = 7.0
            // 设置圆角
            lineCap = kCALineCapRound
            lineJoin = kCALineJoinRound
            
            // 首先设置path是小三角形
            path = smallTrianglePath.CGPath
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    

     2、三角形图层实在执行到抖动动画时添加上去的:

        // 新属性
        let triangle = TriangleLayer()
    
        // 修改wobbleCircleLayer()方法
        func wobbleCircleLayer() {
            circle.wobbleAnimate()
            
            layer.addSublayer(triangle)
        }
    

     3、在TriangleLayer新设置左边突出路径、右边突出路径、和顶部突出路径,三角形突出动画:

        // 左边突出
        var leftTrianglePath: UIBezierPath {
            let leftPath = UIBezierPath()
            leftPath.moveToPoint(CGPoint(x: 5.0, y: 95.0))
            leftPath.addLineToPoint(CGPoint(x: 50.0, y: 12.5 + paddingSpace))
            leftPath.addLineToPoint(CGPoint(x: 95.0 - paddingSpace, y: 95.0))
            leftPath.closePath()
            return leftPath
        }
        
        // 右边突出
        var rightTrianglePath: UIBezierPath {
            let rightPath = UIBezierPath()
            rightPath.moveToPoint(CGPoint(x: 5.0, y: 95.0))
            rightPath.addLineToPoint(CGPoint(x: 50.0, y: 12.5 + paddingSpace))
            rightPath.addLineToPoint(CGPoint(x: 95.0, y: 95.0))
            rightPath.closePath()
            return rightPath
        }
        
        // 顶部突出
        var topTrianglePath: UIBezierPath {
            let topPath = UIBezierPath()
            topPath.moveToPoint(CGPoint(x: 5.0, y: 95.0))
            topPath.addLineToPoint(CGPoint(x: 50.0, y: 12.5))
            topPath.addLineToPoint(CGPoint(x: 95.0, y: 95.0))
            topPath.closePath()
            return topPath
        }
    
        // 突出动画
        func triangleAnimation() {
            // left
            let triangleAnimationLeft: CABasicAnimation = CABasicAnimation(keyPath: "path")
            triangleAnimationLeft.fromValue = smallTrianglePath.CGPath
            triangleAnimationLeft.toValue = leftTrianglePath.CGPath
            triangleAnimationLeft.beginTime = 0.0
            triangleAnimationLeft.duration = 0.3
            // right
            let triangleAnimationRight: CABasicAnimation = CABasicAnimation(keyPath: "path")
            triangleAnimationRight.fromValue = leftTrianglePath.CGPath
            triangleAnimationRight.toValue = rightTrianglePath.CGPath
            triangleAnimationRight.beginTime = triangleAnimationLeft.beginTime + triangleAnimationLeft.duration
            triangleAnimationRight.duration = 0.25
            // top
            let triangleAnimationTop: CABasicAnimation = CABasicAnimation(keyPath: "path")
            triangleAnimationTop.fromValue = rightTrianglePath.CGPath
            triangleAnimationTop.toValue = topTrianglePath.CGPath
            triangleAnimationTop.beginTime = triangleAnimationRight.beginTime + triangleAnimationRight.duration
            triangleAnimationTop.duration = 0.20
            // group
            let triangleAnimationGroup: CAAnimationGroup = CAAnimationGroup()
            triangleAnimationGroup.animations = [triangleAnimationLeft, triangleAnimationRight, triangleAnimationTop]
            triangleAnimationGroup.duration = triangleAnimationTop.beginTime + triangleAnimationTop.duration
            triangleAnimationGroup.fillMode = kCAFillModeForwards
            triangleAnimationGroup.removedOnCompletion = false
            addAnimation(triangleAnimationGroup, forKey: nil)
        }
    

     4、在抖动动画进行到一定时间时执行三角形突出动画(在AnimationView中设置):

        // 圆形抖动动画 
        func wobbleCircleLayer() {
            circle.wobbleAnimate()
            
            layer.addSublayer(triangle)
            // 同样启用定时器,以防止动画同时产生
            NSTimer.scheduledTimerWithTimeInterval(0.9, target: self, selector: #selector(AnimationView.showTriangleAnimation), userInfo: nil, repeats: false)
        }
        
        // 三角形突出动画
        func showTriangleAnimation() {
            triangle.triangleAnimation()
        }
    

    旋转动画

    1、在旋转的同时需要把圆形视图缩小,在圆形视图类中添加缩小方法:

        /**
         缩小动画
         */
        func contract() {
            let animation = CABasicAnimation(keyPath: "path")
            animation.fromValue = endCirclePath.CGPath
            animation.toValue = beginCirclePath.CGPath
            animation.fillMode = kCAFillModeForwards
            animation.removedOnCompletion = false
            animation.duration = animationDuration
            self.addAnimation(animation, forKey: nil)
        }
    

     2、新添加旋转方法:

        // 三角形突出动画
        func showTriangleAnimation() {
            triangle.triangleAnimation()
            // 旋转图层
            NSTimer.scheduledTimerWithTimeInterval(0.9, target: self, selector: #selector(AnimationView.transformAnimation), userInfo: nil, repeats: false)
        }
        
        func transformAnimation() {
            // 按照z轴旋转
            transformRotationZ()
            
            // 把圆形图层缩小
            circle.contract()
        }
        
        func transformRotationZ() {
            // 设置一个合适的锚点
            layer.anchorPoint = CGPointMake(0.5, 0.65)
            
            let rotation = CABasicAnimation(keyPath: "transform.rotation.z")
            rotation.toValue = CGFloat(M_PI * 2)
            rotation.duration = 0.45
            rotation.removedOnCompletion = true
            layer.addAnimation(rotation, forKey: nil)
        }
    

    绘制矩形动画 

    1、创建一个矩形图层:

    class RectangleLayer: CAShapeLayer {
        // 矩形路径
        var rectanglePath: UIBezierPath {
            let rectangle = UIBezierPath()
            rectangle.moveToPoint(CGPointMake(0.0, 100.0))
            rectangle.addLineToPoint(CGPointMake(0.0, -lineWidth))
            rectangle.addLineToPoint(CGPointMake(100.0, -lineWidth))
            rectangle.addLineToPoint(CGPointMake(100.0, 100.0))
            rectangle.addLineToPoint(CGPointMake(-lineWidth / 2, 100.0))
            rectangle.closePath()
            return rectangle
        }
        
        override init() {
            super.init()
            // 设置填充色为透明
            fillColor = UIColor.clearColor().CGColor
            lineWidth = 5.0
            // 设置路径
            path = rectanglePath.CGPath
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        // 绘制矩形
        func strokeChangeWithColor(color: UIColor) {
            strokeColor = color.CGColor
            
            let strokeAnimation = CABasicAnimation(keyPath: "strokeEnd")
            strokeAnimation.fromValue = 0.0
            strokeAnimation.toValue = 1.0
            strokeAnimation.duration = 0.4
            addAnimation(strokeAnimation, forKey: nil)
        }
    }
    

     2、矩形动画是在缩小圆形图层后开始执行的,修改Animation的transformAnimation()方法:

       let redRectangleLayer = RectangleLayer()

      let blueRectangleLayer = RectangleLayer()
      func transformAnimation() {
            // 按照z轴旋转
            transformRotationZ()
            
            // 把圆形图层缩小
            circle.contract()
            
            // 执行矩形动画
            NSTimer.scheduledTimerWithTimeInterval(0.45, target: self, selector: #selector(AnimationView.drawRedRectangleAnimation), userInfo: nil, repeats: false)
            NSTimer.scheduledTimerWithTimeInterval(0.65, target: self, selector: #selector(AnimationView.drawBlueRectangleAnimation), userInfo: nil, repeats: false)
        }
    
        func drawRedRectangleAnimation() {
            layer.addSublayer(redRectangleLayer)
            redRectangleLayer.strokeChangeWithColor(UIColor(red: 221.0 / 255.0, green: 108.0 / 255.0, blue: 217.0 / 255.0, alpha: 1.0))
        }
        
        func drawBlueRectangleAnimation() {
            layer.addSublayer(blueRectangleLayer)
            blueRectangleLayer.strokeChangeWithColor(UIColor(red: 51.0 / 255.0, green: 226.0 / 255.0, blue: 175.0 / 255.0, alpha: 1.0))
        }
    

    水波纹动画

    1、首先创建水波纹视图

    class WaveLayer: CAShapeLayer {
        let animationDuration: CFTimeInterval = 0.18
        
        // 最开始的状态 没有水波纹
        var wavePathPre: UIBezierPath {
            let arcPath = UIBezierPath()
            arcPath.moveToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 99.0))
            arcPath.addLineToPoint(CGPoint(x: 100.0, y: 99.0))
            arcPath.addLineToPoint(CGPoint(x: 100.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.closePath()
            return arcPath
        }
        
        // 水波纹到20%的程度
        var wavePathStarting: UIBezierPath {
            let arcPath = UIBezierPath()
            arcPath.moveToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 80.0))
            arcPath.addCurveToPoint(CGPoint(x: 100.0, y: 80.0), controlPoint1: CGPoint(x: 30.0, y: 70.0), controlPoint2: CGPoint(x: 40.0, y: 90.0))
            arcPath.addLineToPoint(CGPoint(x: 100.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.closePath()
            return arcPath
        }
        
        // 水波纹到40%的程度
        var wavePathLow: UIBezierPath {
            let arcPath = UIBezierPath()
            arcPath.moveToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 60.0))
            arcPath.addCurveToPoint(CGPoint(x: 100.0, y: 60.0), controlPoint1: CGPoint(x: 30.0, y: 65.0), controlPoint2: CGPoint(x: 40.0, y: 50.0))
            arcPath.addLineToPoint(CGPoint(x: 100.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.closePath()
            return arcPath
        }
        
        // 水波纹到60%的程度
        var wavePathMid: UIBezierPath {
            let arcPath = UIBezierPath()
            arcPath.moveToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 40.0))
            arcPath.addCurveToPoint(CGPoint(x: 100.0, y: 40.0), controlPoint1: CGPoint(x: 30.0, y: 30.0), controlPoint2: CGPoint(x: 40.0, y: 50.0))
            arcPath.addLineToPoint(CGPoint(x: 100.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.closePath()
            return arcPath
        }
        
        // 水波纹到80%的程度
        var wavePathHigh: UIBezierPath {
            let arcPath = UIBezierPath()
            arcPath.moveToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 20.0))
            arcPath.addCurveToPoint(CGPoint(x: 100.0, y: 20.0), controlPoint1: CGPoint(x: 30.0, y: 25.0), controlPoint2: CGPoint(x: 40.0, y: 10.0))
            arcPath.addLineToPoint(CGPoint(x: 100.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.closePath()
            return arcPath
        }
        
        // 完全填满的程度
        var wavePathComplete: UIBezierPath {
            let arcPath = UIBezierPath()
            arcPath.moveToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: -5.0))
            arcPath.addLineToPoint(CGPoint(x: 100.0, y: -5.0))
            arcPath.addLineToPoint(CGPoint(x: 100.0, y: 100.0))
            arcPath.addLineToPoint(CGPoint(x: 0.0, y: 100.0))
            arcPath.closePath()
            return arcPath
        }
    
        override init() {
            super.init()
            
            fillColor = UIColor(red: 51.0 / 255.0, green: 226.0 / 255.0, blue: 175.0 / 255.0, alpha: 1.0).CGColor
            path = wavePathPre.CGPath
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        // 执行动画
        func animate() {
            let waveAnimationPre: CABasicAnimation = CABasicAnimation(keyPath: "path")
            waveAnimationPre.fromValue = wavePathPre.CGPath
            waveAnimationPre.toValue = wavePathStarting.CGPath
            waveAnimationPre.beginTime = 0.0
            waveAnimationPre.duration = animationDuration
            
            let waveAnimationLow: CABasicAnimation = CABasicAnimation(keyPath: "path")
            waveAnimationLow.fromValue = wavePathStarting.CGPath
            waveAnimationLow.toValue = wavePathLow.CGPath
            waveAnimationLow.beginTime = waveAnimationPre.beginTime + waveAnimationPre.duration
            waveAnimationLow.duration = animationDuration
            
            let waveAnimationMid: CABasicAnimation = CABasicAnimation(keyPath: "path")
            waveAnimationMid.fromValue = wavePathLow.CGPath
            waveAnimationMid.toValue = wavePathMid.CGPath
            waveAnimationMid.beginTime = waveAnimationLow.beginTime + waveAnimationLow.duration
            waveAnimationMid.duration = animationDuration
            
            let waveAnimationHigh: CABasicAnimation = CABasicAnimation(keyPath: "path")
            waveAnimationHigh.fromValue = wavePathMid.CGPath
            waveAnimationHigh.toValue = wavePathHigh.CGPath
            waveAnimationHigh.beginTime = waveAnimationMid.beginTime + waveAnimationMid.duration
            waveAnimationHigh.duration = animationDuration
            
            let waveAnimationComplete: CABasicAnimation = CABasicAnimation(keyPath: "path")
            waveAnimationComplete.fromValue = wavePathHigh.CGPath
            waveAnimationComplete.toValue = wavePathComplete.CGPath
            waveAnimationComplete.beginTime = waveAnimationHigh.beginTime + waveAnimationHigh.duration
            waveAnimationComplete.duration = animationDuration
            /// 动画组
            let arcAnimationGroup: CAAnimationGroup = CAAnimationGroup()
            arcAnimationGroup.animations = [waveAnimationPre, waveAnimationLow, waveAnimationMid, waveAnimationHigh, waveAnimationComplete]
            arcAnimationGroup.duration = waveAnimationComplete.beginTime + waveAnimationComplete.duration
            arcAnimationGroup.fillMode = kCAFillModeForwards
            arcAnimationGroup.removedOnCompletion = false
            addAnimation(arcAnimationGroup, forKey: nil)
        }
    }
    

     2、水波纹动画是在矩形动画完成后:

        func drawBlueRectangleAnimation() {
            layer.addSublayer(blueRectangleLayer)
            blueRectangleLayer.strokeChangeWithColor(UIColor(red: 51.0 / 255.0, green: 226.0 / 255.0, blue: 175.0 / 255.0, alpha: 1.0))
            
            NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(AnimationView.drawWaveAnimation), userInfo: nil, repeats: false)
        }
        
        func drawWaveAnimation() {
            layer.addSublayer(waveLayer)
            waveLayer.animate()
        }
    

    放大动画并显示welcome

    1、首先在AnimationView中新添加一些属性和一个协议:

    @objc protocol AnimationViewDelegate: class {
        optional func completeAnimation()
    }
    
    class AnimationView: UIView {
        // 以下是新添加的属性和方法
        // 放大的frame,由外界设置
        var parentFrame = CGRectZero
        // 设置一个代理
        var delegate: AnimationViewDelegate?
    
        func drawWaveAnimation() {
            layer.addSublayer(waveLayer)
            waveLayer.animate()
            NSTimer.scheduledTimerWithTimeInterval(0.9, target: self, selector: #selector(AnimationView.expandView), userInfo: nil, repeats: false)
        }
        
        func expandView() {
            backgroundColor = UIColor(red: 51.0 / 255.0, green: 226.0 / 255.0, blue: 175.0 / 255.0, alpha: 1.0)
            // 清空所有sublayer
            layer.sublayers = nil
            frame = CGRectMake(frame.origin.x - blueRectangleLayer.lineWidth,
                               frame.origin.y - blueRectangleLayer.lineWidth,
                               frame.size.width + blueRectangleLayer.lineWidth * 2,
                               frame.size.height + blueRectangleLayer.lineWidth * 2)
            // 执行动画
            UIView.animateWithDuration(0.3, delay: 0.0, options: .CurveEaseInOut, animations: { 
                self.frame = self.parentFrame
                }) { (finished) in
                    self.delegate?.completeAnimation()
            }
        }
    
    }
    

     2、在ViewController中修改以下代码:

    class ViewController: UIViewController, AnimationViewDelegate {
        weak var animationView: AnimationView?
        
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)
            
            addAnimationView()
        }
    
        func addAnimationView() {
            let size: CGFloat = 100.0
            let screenSize = UIScreen.mainScreen().bounds.size
            let animationView = AnimationView(frame: CGRect(x: screenSize.width / 2 - size / 2, y: screenSize.height / 2 - size / 2,  size, height: size))
            animationView.parentFrame = view.frame
            animationView.delegate = self
            view.addSubview(animationView)
            
            self.animationView = animationView
        }
        
        // MARK: AnimationView的代理方法
        func completeAnimation() {
            // 1
            animationView!.removeFromSuperview()
            view.backgroundColor = UIColor(red: 51.0 / 255.0, green: 226.0 / 255.0, blue: 175.0 / 255.0, alpha: 1.0)
            // 2
            let label: UILabel = UILabel(frame: view.frame)
            label.textColor = UIColor.whiteColor()
            label.font = UIFont(name: "HelveticaNeue-Thin", size: 50.0)
            label.textAlignment = NSTextAlignment.Center
            label.text = "Welcome"
            label.transform = CGAffineTransformScale(label.transform, 0.25, 0.25)
            view.addSubview(label)
            
            // 3
            UIView.animateWithDuration(0.4, delay: 0.0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.1, options: UIViewAnimationOptions.CurveEaseInOut,animations: ({
                
                label.transform = CGAffineTransformScale(label.transform, 4.0, 4.0)
            }), completion: { finished in
                
            })
        }
    }
    

     到此结束。

  • 相关阅读:
    设计模式之工厂模式
    Java内存区域与内存溢出异常
    Spark环境搭建
    Android获取蓝牙地址
    Intent和BroadcastReceiver
    Fragment初探
    Acticity的生命周期和启动模式
    Maven依赖,去哪儿找
    Spring-BeanDefinition
    Spring-BeanFactory体系介绍
  • 原文地址:https://www.cnblogs.com/Alex-sk/p/5621346.html
Copyright © 2011-2022 走看看