iOS动画:Layer关键帧动画和结构体属性(7)

22 篇文章 0 订阅
21 篇文章 0 订阅

关键帧动画

layer上的关键帧动画和UIView上的关键帧动画略有不同,UIView关键帧动画是将一些独立的简单动画结合起来,它可以为不同的视图和属性设置动画,动画可以重叠和间断。
而CAKeyframeAnimation是为单个属性设置动画,你可以定义动画的关键点,但动画不能有任何重叠或者间断。虽然有限制,但效果会更好。

创建一个关键帧动画:

	let wobble = CAKeyframeAnimation(keyPath: "transform.rotation")
    wobble.duration = 0.25
    wobble.repeatCount = 4
    wobble.values = [0.0, -.pi/4.0, 0.0, .pi/4.0, 0.0]
    wobble.keyTimes = [0.0, 0.25, 0.5, 0.75, 1.0]
    heading.layer.add(wobble, forKey: nil)

这里创建了一个关键帧动画,前面一节我们创建的basic动画是通过fromValue和toValue来设置帧的位置,而CAKeyframeAnimation是通过values数组来定义关键帧的位置。values中的值表示:将图层从0°旋转到-45°(等于π/ 4),再回到0°,一直旋转到45°,最后回到0°。
keyTimes表示动画的values对应的关键时间,是一个基于duration的时间百分比,请确保开始时间和结束时间设置为0.0和1.0,以避免动画有任何跳跃。

结构体属性

除了可以直接设置values的值外,我们还可以利用NSValue,将结构体类型进行“包裹”使用。

    let balloon = CALayer()
    balloon.contents = UIImage(named: "balloon")!.cgImage
    balloon.frame = CGRect(x: -50.0, y: 0.0, width: 50.0, height: 65.0)
    view.layer.insertSublayer(balloon, below: username.layer)
    
    let flight = CAKeyframeAnimation(keyPath: "position")
    flight.duration = 12.0
    flight.values = [
      CGPoint(x: -50.0, y: 0.0),
      CGPoint(x: view.frame.width + 50.0, y: 160.0),
      CGPoint(x: -50.0, y: loginButton.center.y)
      ].map { NSValue(cgPoint: $0) }

    flight.keyTimes = [0.0, 0.5, 1.0]
    balloon.add(flight, forKey: nil)
    balloon.position = CGPoint(x: -50.0, y: loginButton.center.y)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值