IOS-swift 动画03 CAAnimationGroup
2016-05-20 15:51
525 查看
CAAnimationGroup 动画组
CAAnimationGroup 用于一组动画
直接上代码
CAAnimationGroup 用于一组动画
直接上代码
// // ViewController.swift // AnimationGroup // // Created by 鲍东升 on 16/5/20. // Copyright © 2016年 鲍东升. All rights reserved. // import UIKit class 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 } } }