Swift 关键帧动画 图层动画 基础动画

 

 

一。

//关键帧动画

    func keyFrameAnimate(){

        let imgview = UIImageView(image: UIImage(named: "apple"))

        imgview.frame = CGRect(x: 50, y: 50, width: 100, height: 100)

        self.view.addSubview(imgview)

        //获取图层

        let layer = imgview.layer

        //1. 创建关键帧

        let posAnimate = CAKeyframeAnimation(keyPath: "position")

        // 2. 设置关键帧

        let value0 = NSValue(cgPoint: layer.position)

        let value1 = NSValue(cgPoint: CGPoint(x: layer.position.x

            + 200, y: layer.position.y))

        let value2 = NSValue(cgPoint: CGPoint(x: layer.position.x + 200, y: layer.position.y + 200))

        let value3 = NSValue(cgPoint: CGPoint(x: layer.position.x, y: layer.position.y + 200))

        let value4 = NSValue(cgPoint: layer.position)

        posAnimate.values = [value0,value1,value2,value3,value4]

        

        //关键帧和基础动画合用

        let opacityAnimate = CABasicAnimation(keyPath: "transform.scale.y")

        opacityAnimate.fromValue = 1

        opacityAnimate.toValue = 0.1

        opacityAnimate.repeatCount = MAXFLOAT

        opacityAnimate.duration = 0.2

        opacityAnimate.autoreverses = true

        

        //设置每个关键帧的时长

        posAnimate.keyTimes = [0, 0.1, 0.6, 0.7,1.0]

        

        //设置每个关键帧的时间曲线

        let tf0 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)

        let tf1 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)

        let tf2 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)

        let tf3 = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)

        posAnimate.timingFunctions = [tf0,tf1,tf2,tf3]

      

        

        posAnimate.autoreverses = false

        posAnimate.repeatCount = MAXFLOAT

        posAnimate.duration = 3.0

//        图层增加动画效果

        layer.add(posAnimate, forKey: ";posAnimate")

        layer.add(opacityAnimate, forKey: "opacityAnimate")

    }

    

 

 

 

 

  二。  

//     图层动画

    func layerAnimation(){

        

        let myLayer = CALayer()

        myLayer.backgroundColor = UIColor.blue.cgColor

        myLayer.borderColor = UIColor.brown.cgColor

        myLayer.frame = CGRect(x: 100, y: 100, width: 100, height: 100)

        myLayer.borderWidth = 5.0

        myLayer.cornerRadius  = 10.0

        myLayer.shadowColor = UIColor.black.cgColor

        myLayer.shadowOffset = CGSize(width: 5, height: 5)

        myLayer.shadowOpacity = 1

      

        self.view.layer.addSublayer(myLayer)

    }

 

 

 

 

 

 

 

三。

//    显示动画

    func BasicAnimation(){

         //创建imageView

        let imgView = UIImageView(image: UIImage(named: "apple"))

        imgView.frame = CGRect(x: 50, y: 50, width: 100, height: 100)

        self.view.addSubview(imgView)

        let layer = imgView.layer

        

        //1.创建动画指定为比例变化动画,设置属性

        let scaleAnimate = CABasicAnimation(keyPath: "transform.scale")

        scaleAnimate.fromValue = 1.0

        scaleAnimate.toValue = 1.5

        scaleAnimate.autoreverses = true

        scaleAnimate.repeatCount = MAXFLOAT

        scaleAnimate.duration = 2.0

        

        //2.创建动画指定为背景颜色变化动画,设置属性

        let bgcAnimate = CABasicAnimation(keyPath: "backgroundColor")

        bgcAnimate.fromValue = UIColor.red.cgColor

        bgcAnimate.toValue = UIColor.green.cgColor

        bgcAnimate.autoreverses = true

        bgcAnimate.repeatCount = MAXFLOAT

        bgcAnimate.duration = 2.0

        

        let rotateAnimate = CABasicAnimation(keyPath: "transform.rotation.y")

        rotateAnimate.toValue = Double.pi

        rotateAnimate.repeatCount = MAXFLOAT

        rotateAnimate.autoreverses = true

        rotateAnimate.duration = 2.0

        

        let tranAnimate = CABasicAnimation(keyPath: "position")

        tranAnimate.fromValue = NSValue(cgPoint: CGPoint(x: 50, y: 50))

        tranAnimate.toValue = NSValue(cgPoint: CGPoint(x: 300, y: 300))

        rotateAnimate.repeatCount = MAXFLOAT

        rotateAnimate.autoreverses = true

        rotateAnimate.duration = 5.0

        

        let  opacityAnimate = CABasicAnimation(keyPath: "opacity")

        opacityAnimate.fromValue = 0.0

        opacityAnimate.toValue = 1.0

        opacityAnimate.autoreverses = true

        opacityAnimate.repeatCount = MAXFLOAT

        opacityAnimate.duration = 2.0 //0.3闪烁

       

        layer.add(rotateAnimate, forKey: "rotateAnimate")

        layer.add(scaleAnimate, forKey: "sacleAnimate")

        layer.add(opacityAnimate, forKey: "opacityAnimate")

        layer.add(bgcAnimate, forKey: "bgcAnimate")

        layer.add(tranAnimate, forKey: "tranAnimate")

    }

posted @ 2017-11-12 02:59  小炮陈  阅读(714)  评论(0编辑  收藏  举报