您的位置:首页 > 移动开发 > Swift

IOS-swift 动画03 CAAnimationGroup

2016-05-20 15:51 525 查看
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
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: