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, width: 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, width: 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, width: 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, width: 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
其余如下:

posted @ 2017-02-07 18:09  brave-sailor  阅读(416)  评论(0编辑  收藏  举报