zoukankan      html  css  js  c++  java
  • Swift之动画总结

    UIView动画个人笔记,代码简单,不过多赘述。
    1.定义三个View

    @IBOutlet weak var mFirstView: UIView!
    @IBOutlet weak var mSecondView: UIView!
    
    //var mOriginFrame: CGRect! //记录view的初始位置
    var mFirstSubView: UIView!

    2.初始化相关信息

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.mOriginFrame = self.mFirstView.frame
    
        self.mFirstSubView = UIView(frame: CGRect(x: 5, y: 5,  50, height: 50))
        self.mFirstSubView.backgroundColor = UIColor.blackColor()
        self.mFirstView.addSubview(self.mFirstSubView)
    }

    3.实现相关动画

    //简单Y轴平移动画
    func basicAnimate() {
        UIView.animateWithDuration(1) { () -> Void in
            self.mFirstView.frame.origin.y += 100
        }
    }
    
    //可配置option信息动画
    func optionAnimate() {
        UIView.animateWithDuration(3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
            self.mFirstView.frame.origin.x += 100
    
            //Nest重写父层option属性
            UIView.animateWithDuration(3, delay: 0, options: [UIViewAnimationOptions.OverrideInheritedOptions, UIViewAnimationOptions.OverrideInheritedCurve, UIViewAnimationOptions.CurveEaseOut], animations: { () -> Void in
                self.mSecondView.frame.origin.x += 100
                }, completion: { (finished:Bool) -> Void in
    
            })
            }) { (finished: Bool) -> Void in
    
        }
    }
    
    //试图动画操作子视图
    func operateSubview() {
        UIView.transitionWithView(self.mFirstView, duration: 1, options: [UIViewAnimationOptions.TransitionCrossDissolve, UIViewAnimationOptions.AllowAnimatedContent], animations: { () -> Void in
            self.mFirstSubView.frame.origin.x += 150
            }) { (finished: Bool) -> Void in
    
        }
    }
    
    //替换视图动画
    func replaceView() {
        let view = UIView(frame: CGRect(x: 21, y: 150,  240, height: 60))
        view.backgroundColor = UIColor.magentaColor()
        UIView.transitionFromView(self.mFirstView, toView: view, duration: 1, options: UIViewAnimationOptions.TransitionCurlUp) { (finished:Bool) -> Void in
        }
    }
    
    //----------------------核心动画----------------------
    /**
     *显式动画
     */
    func newBasicAnimate() {
        //创建一个imageview视图
        let imgView = UIImageView(image: UIImage(named: "img"))
        imgView.frame = CGRect(x: 150, y: 200,  100, height: 100)
        self.view.addSubview(imgView)
    
        //1.选定角色
        let layer = imgView.layer
        layer.cornerRadius = 5.0
    
        //2.写剧本
        let scaleAnimate = CABasicAnimation(keyPath: "transform.scale")
        scaleAnimate.fromValue = 1.0
        scaleAnimate.toValue = 1.5
        scaleAnimate.autoreverses = true
        scaleAnimate.repeatCount = MAXFLOAT
        scaleAnimate.duration = 1.0
    
        //第二个剧本
        let opaqueAnimate = CABasicAnimation(keyPath: "opacity")
        opaqueAnimate.fromValue = 0.1
        opaqueAnimate.toValue = 1
        opaqueAnimate.autoreverses = true
        opaqueAnimate.repeatCount = MAXFLOAT
        opaqueAnimate.duration = 1.0
    
        //把剧本交给演员开始动画
        layer.addAnimation(scaleAnimate, forKey: "scaleAnimate")
        layer.addAnimation(opaqueAnimate, forKey: "opacityAnimate")
    }
    
    /**
    *关键帧动画
    */
    func newKeyFrameAniamte() {
        //创建一个imageview视图
        let imgView = UIImageView(image: UIImage(named: "img"))
        imgView.frame = CGRect(x: 200, y: 200,  40, height: 40)
        self.view.addSubview(imgView)
    
        //1.选定角色
        let layer = imgView.layer
        layer.cornerRadius = 5.0
    
        //2.写剧本
        let keyAnimate = CAKeyframeAnimation(keyPath: "position")
        //3.设定关键帧
        let value0 = NSValue(CGPoint: layer.position)
        let value1 = NSValue(CGPoint: CGPointMake(layer.position.x, layer.position.y + 200))
        let value2 = NSValue(CGPoint: CGPointMake(layer.position.x - 150, layer.position.y + 200))
        let value3 = NSValue(CGPoint: CGPointMake(layer.position.x - 150, layer.position.y))
        let value4 = NSValue(CGPoint: layer.position)
        //速度曲线
        //let tf0 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        //let tf1 = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        //let tf2 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
        //let tf3 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
        //keyAnimate.timingFunctions = [tf0, tf1, tf2, tf3]
        //每段执行的时间
        //keyAnimate.keyTimes = [0.0, 0.5, 0.6, 0.7, 1]
    
        keyAnimate.values = [value0, value1, value2, value3, value4]
        keyAnimate.autoreverses = false
        keyAnimate.repeatCount = MAXFLOAT
        keyAnimate.duration = 6.0
    
        layer.addAnimation(keyAnimate, forKey: "keyAnimate")
    }

    附:CABasicAnimation的KeyPath
    透明度为:opacity
    其余如下:

  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6375390.html
Copyright © 2011-2022 走看看