IOS-swift 动画03 CAAnimationGroup

来源:互联网 发布:软件行业协会好吗 编辑:程序博客网 时间:2024/05/30 02:51

CAAnimationGroup 动画组
CAAnimationGroup 用于一组动画
这里写图片描述
直接上代码

////  ViewController.swift//  AnimationGroup////  Created by 鲍东升 on 16/5/20.//  Copyright © 2016年 鲍东升. All rights reserved.//import UIKitclass ViewController: UIViewController {    //MARK: - PropertyList    var cardView1    :   UIView?    var cardView2    :   UIView?    private lazy var show2FrontAnimationGroup:CAAnimationGroup={        var val=CAAnimationGroup()        val.animations = []        return val    }()    private lazy var hide2BackAnimationGroup:CAAnimationGroup={        var val=CAAnimationGroup()        val.animations = []        return val    }()    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view, typically from a nib.        prepareView(view)    }    func prepareView(view:UIView) -> UIView {        cardView1 = UIView(frame: CGRect(x: 140, y: 200, width: 120, height: 120))        cardView1?.backgroundColor = UIColor.cyanColor()        view.addSubview(cardView1!)        cardView2 = UIView(frame: CGRect(x: 140, y: 200, width: 120, height: 120))        cardView2?.backgroundColor = UIColor.orangeColor()        view.addSubview(cardView2!)        return view    }    func addZpositonAnimation(group:CAAnimationGroup,reverseFlag:Bool) -> CAAnimationGroup {        let zPositionAnimation:CABasicAnimation = CABasicAnimation(keyPath: "zPosition")        if !reverseFlag {            zPositionAnimation.fromValue    = -1            zPositionAnimation.toValue      =  1        }else{            zPositionAnimation.fromValue    =  1            zPositionAnimation.toValue      = -2        }        zPositionAnimation.duration = 1.2        zPositionAnimation.fillMode = kCAFillModeForwards        zPositionAnimation.removedOnCompletion = false        group.animations!.append(zPositionAnimation)        return group    }    func addPostionAnimation(group:CAAnimationGroup,reverseFlag:Bool) -> CAAnimationGroup {        let positonAnimation:CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "position")        if !reverseFlag {            positonAnimation.values = [                NSValue(CGPoint:CGPointZero),                NSValue(CGPoint:CGPointMake(80, 0)),                NSValue(CGPoint:CGPointZero)            ]        }else{            positonAnimation.values = [                NSValue(CGPoint:CGPointZero),                NSValue(CGPoint:CGPointMake(-80, 0)),                NSValue(CGPoint:CGPointZero)            ]        }        positonAnimation.timingFunctions = [            CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut),            CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)        ]        positonAnimation.duration = 1.5        positonAnimation.additive = true//        positonAnimation.removedOnCompletion = tr//        positonAnimation.fillMode = kCAFillModeRemoved        group.animations?.append(positonAnimation)        return group    }    func addRotaionAnimation(group:CAAnimationGroup,reverseFlag:Bool) -> CAAnimationGroup {        let rotationAnimation:CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "transform.rotation")        if !reverseFlag {            rotationAnimation.values = [0 , 0.15 ,0]        }else{            rotationAnimation.values = [0 , -0.15 ,0]        }        rotationAnimation.duration = 1.5        rotationAnimation.timingFunctions = [            CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut),            CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)        ]        group.animations?.append(rotationAnimation)        return group    }    func toolAddAnimationGroup2View(view:UIView,key:String,animationGroup:CAAnimationGroup,procFunc:((CAAnimationGroup)->(CAAnimationGroup))) -> UIView {        view.layer.addAnimation(procFunc(animationGroup), forKey: key)        return view    }    func configShow2FrontAnimationGroup(animationGroup:CAAnimationGroup) -> CAAnimationGroup {        animationGroup.animations?.removeAll()        addPostionAnimation(animationGroup, reverseFlag: false)        addZpositonAnimation(animationGroup, reverseFlag: false)        addRotaionAnimation(animationGroup, reverseFlag: false)        animationGroup.duration = 1.5        return animationGroup    }    func configHide2BackAnimatinoGroup(animationGroup:CAAnimationGroup) -> CAAnimationGroup {        animationGroup.animations?.removeAll()        addPostionAnimation(animationGroup, reverseFlag: true)        addZpositonAnimation(animationGroup, reverseFlag: true)        addRotaionAnimation(animationGroup, reverseFlag: true)        animationGroup.duration = 1.5        animationGroup.removedOnCompletion = true        animationGroup.fillMode = kCAFillModeForwards        return animationGroup    }    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {        cardView1?.layer.zPosition = -1        toolAddAnimationGroup2View(cardView1!, key: "showAnimationGroup", animationGroup: show2FrontAnimationGroup, procFunc: configShow2FrontAnimationGroup)        toolAddAnimationGroup2View(cardView2!, key: "hideAnimationGroup", animationGroup: hide2BackAnimationGroup, procFunc: configHide2BackAnimatinoGroup)        cardView1?.layer.zPosition = 1        view.userInteractionEnabled = false        //2秒后复位        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(2 * Double(NSEC_PER_SEC)))        dispatch_after(delayTime, dispatch_get_main_queue()) {            self.cardView1?.layer.zPosition = -1            self.view.userInteractionEnabled = true        }    }}
1 0
原创粉丝点击