iOS核心动画详解swift版----基础动画

iOS核心动画详解swift版---基础动画

  • 创建工程,添加2个ViewController,通过rootViewController设置显示的ViewController
  • 第一个ViewController实现基础动画 ####1.position动画,通过移动position移动位置 position 实现代码如下:
func position() {
    // 声明一个基础动画
    let ani = CABasicAnimation(keyPath: "position")
    // 设置动画toValue,也就是要移动到那个位置
    ani.toValue = NSValue(CGPoint: CGPointMake(300, 300))
    // 设置动画曲线:线性/先快后慢/先慢后快等
    ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    // 代理
    ani.delegate = self
    // 设置动画结束后不移除,需要以下2个属性设置共同完成
    ani.removedOnCompletion = false;
    ani.fillMode = kCAFillModeForwards;
    // 添加动画
    self.testView.layer.addAnimation(ani, forKey: nil)
}

####2.rotation动画,实现通过x,y,z轴的旋转 rotation 实现代码如下:

func rotationX() {
    let ani = CABasicAnimation(keyPath: "transform.rotation.x")
    ani.toValue = NSNumber.init(double: M_PI)
    ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    ani.delegate = self
    ani.removedOnCompletion = false;
    ani.fillMode = kCAFillModeForwards;
    self.testView.layer.addAnimation(ani, forKey: nil)
}

####3.scale动画,放大或者缩小一定的倍数 scale 代码如下:

func scale() {
    let ani = CABasicAnimation(keyPath: "transform.scale")
    ani.toValue = NSNumber(int: 2)
    ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    ani.delegate = self
    ani.removedOnCompletion = false;
    ani.fillMode = kCAFillModeForwards;
    self.testView.layer.addAnimation(ani, forKey: nil)
}

####4.translation动画,直接移动到某个位置(与position对比) translation 代码如下:

func translation() {
    let ani = CABasicAnimation(keyPath: "transform.translation")
    ani.toValue = NSValue(CGPoint: CGPointMake(-50, -50))
    ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    ani.delegate = self
    ani.removedOnCompletion = false;
    ani.fillMode = kCAFillModeForwards;
    self.testView.layer.addAnimation(ani, forKey: nil)
}

####5.opacity动画,透明度/模糊度 opacity 代码如下:

func opacity() {
    let ani = CABasicAnimation(keyPath: "opacity")
    ani.toValue = NSNumber.init(float: 0.3)
    ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    ani.delegate = self
    ani.removedOnCompletion = false;
    ani.fillMode = kCAFillModeForwards;
    self.testView.layer.addAnimation(ani, forKey: nil)
}

####6.cornerRadius,borderWidth动画:设置圆角,以及边框宽度(需要设置view的layer.masksToBounds) cornerRadius 代码如下:

// 圆角
func cornerRadius() {
    let ani = CABasicAnimation(keyPath: "cornerRadius")
    ani.toValue = NSNumber.init(float: 50)
    ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    ani.delegate = self
    ani.removedOnCompletion = false;
    ani.fillMode = kCAFillModeForwards;
    self.testView.layer.addAnimation(ani, forKey: nil)
}
// 边框宽度
func borderWidth() {
    let ani = CABasicAnimation(keyPath: "borderWidth")
    ani.toValue = NSNumber.init(float: 2)
    ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    ani.delegate = self
    ani.removedOnCompletion = false;
    ani.fillMode = kCAFillModeForwards;
    self.testView.layer.addAnimation(ani, forKey: nil)
}

####7.contents动画,修改view的内容 contents 代码如下:

func contents() {
    let ani = CABasicAnimation(keyPath: "contents")
    ani.toValue = UIImage.init(named: "12.png")?.CGImage
    ani.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    ani.delegate = self
    ani.removedOnCompletion = false;
    ani.fillMode = kCAFillModeForwards;
    self.testView.layer.addAnimation(ani, forKey: nil)
}

###最后是动画的代理方法

// MARK: - 代理方法
// 动画开始
override func animationDidStart(anim: CAAnimation) {
         print("动画开始")
}
// 动画结束
override func animationDidStop(anim: CAAnimation, finished flag: Bool) {
  print("动画结束")
  dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
            Int64(3.0 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
        self.testView.layer.removeAllAnimations()
        print("删除动画")
   }
}

转载于:https://my.oschina.net/ozawa4865/blog/714904

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值