核心动画CABasicAnimation

//
//  ViewController.swift
//  核心动画
//
//  Created by admin on 16/1/27.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        self.imageView.layer.contents = UIImage(imageLiteral: "3").CGImage

        // Do any additional setup after loading the view, typically from a nib.
    }
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.scale()
    }
    // 缩放
    func scale()
    {
        // 这个属性
        let animation = CABasicAnimation()
        animation.keyPath = "transform.scale"
//        animation.toValue = NSValue.init(CATransform3D: CATransform3DMakeScale(1.5, 1.5, 1.5))
        animation.byValue = NSValue.init(CATransform3D: CATransform3DMakeScale(1.5, 1.5, 1.5))
//        self.imageView.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5)
        animation.removedOnCompletion  = false
        animation.fillMode = kCAFillModeForwards
        self.imageView.layer.addAnimation(animation, forKey: nil)
    }
    // 旋转
    func rotation()
    {
        // 这个属性
        let animation = CABasicAnimation()
        // 逐个修改
//        animation.keyPath = "transform.rotation.x"
//        animation.byValue = CGFloat(M_PI)
//        animation.removedOnCompletion = false
//        animation.fillMode = kCAFillModeForwards
        // 直接修改多个坐标
        animation.keyPath = "transform.rotation"
        self.imageView.layer.transform = CATransform3DMakeRotation(CGFloat(M_PI), 1, 1, 1)
        self.imageView.layer.addAnimation(animation, forKey: nil)
    }
    // 平移动画
    func translation()
    {
        let animation = CABasicAnimation()
        // 同时改变横向和纵向
        animation.keyPath = "transform.translation"
        // 从这个位置开始
//        animation.fromValue = NSValue.init(CGPoint: CGPointMake(10, 10))
        // 每次动画执行之后都会改变的距离
        animation.byValue = NSValue.init(CGPoint: CGPointMake(20, 20))
        // 在第一次执行动画的时候会发生偏移,然后无效了
//        animation.toValue = NSValue.init(CGPoint: CGPointMake(30, 30))
//        animation.keyPath = "transform.translation.x"
//        animation.byValue = 20
        animation.removedOnCompletion = false
        animation.fillMode = kCAFillModeForwards
        // 直接对属性进行赋值也是ok的
//        self.imageView.layer.transform = CATransform3DMakeTranslation(100, 100, 10)

        // 单独改变一个方向
        animation.keyPath = "transform.translation.x"
        animation.byValue = 10

        self.imageView.layer.addAnimation(animation, forKey: nil)
    }
    // bounds的动画效果
    func bounds()
    {
        // 实例化动画对象
        let animation = CABasicAnimation()
        // 设置监听的属性名
        animation.keyPath = "bounds"
        // 使用这个的话会有动画效果,并且动画执行完毕也不会回到原来的状态
        //        self.imageView.layer.bounds = CGRectMake(0, 0, 100, 100)
        // 使用这个会执行动画效果,但是结束之后会回到原来的状态,如果不希望恢复,需要设置下面两个属性
        animation.toValue = NSValue.init(CGRect: CGRectMake(0, 0, 100, 100))
        //        // 不设置下面两项的话动画执行完毕会回到原来的状态
        animation.removedOnCompletion = false
        animation.fillMode = kCAFillModeForwards
        animation.duration = 10
        // 给图层添加动画
        self.imageView.layer.addAnimation(animation, forKey: nil)
    }
}

标签: swift, 核心动画

添加新评论