IOS-swift 动画03 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
        }
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值