iOS动画:UIImageView帧动画(完结)

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

这是iOS动画的最后一章,比较简单,我们来创建一只企鹅移动的动画
image_1
1.设置帧动画

  var walkFrames = [
    UIImage(named: "walk01.png")!,
    UIImage(named: "walk02.png")!,
    UIImage(named: "walk03.png")!,
    UIImage(named: "walk04.png")!
  ]
  let totalDuration = 1.0
  func loadWalkAnimation() {
    penguin.animationImages = walkFrames
    penguin.animationDuration = totalDuration / 3
    penguin.animationRepeatCount = 3
  }

animtionImages:存储帧动画的所有帧图像。
animationDuration:告诉UIKit动画一次动画迭代需要持续多长时间。
animationRepeatCount:控制动画的重复次数

当点击左右按钮时,更改企鹅朝向

    var isLookingRight: Bool = true {
        didSet {
            let xScale: CGFloat = isLookingRight ? 1 : -1
            penguin.transform = CGAffineTransform(scaleX: xScale, y: 1)
            slideButton.transform = penguin.transform
        }
    }
    @IBAction func actionLeft(_ sender: AnyObject) {
    	isLookingRight = false
  	}
  
  	@IBAction func actionRight(_ sender: AnyObject) {
    	isLookingRight = true
  	}

在actionLeft中添加动画开始,当点击左侧按钮时,帧图像将开始切换播放动画:

	penguin.startAnimating()	

在actionLeft中添加企鹅行走动画

	    UIView.animate(withDuration: totalDuration, delay: 0, options: .curveEaseOut, animations: {
        self.penguin.center.x -= self.walkSize.width
    }, completion: nil)

在actionRight中添加向右行走的代码:

    penguin.startAnimating()
    UIView.animate(withDuration: totalDuration, delay: 0,
        options: .curveEaseOut,
        animations: {
        self.penguin.center.x += self.walkSize.width
        },
        completion: nil
    )

行走的动画就完成了,现在我们添加跳跃和滑行的动画,当滑行时修改penguin帧图像

	@IBAction func actionSlide(_ sender: AnyObject) {
    	loadSlideAnimation()
    	penguin.startAnimating()
  	}
  	func loadSlideAnimation() {
    	penguin.animationImages = slideFrames
    	penguin.animationDuration = totalDuration
    	penguin.animationRepeatCount = 1
  	}

当点击跳跃调用actionSlide方法时,将会执行新的动画效果,但是会发现,图像尺寸被放大了,因为原来的动画帧尺寸就比较大,所以我们需要修改其大小。

	@IBAction func actionSlide(_ sender: AnyObject) {
    	loadSlideAnimation()
    	penguin.frame = CGRect(x: penguin.frame.origin.x, y: penguinY+(walkSize.height-slideSize.height), width: slideSize.width, height: slideSize.height)
    	penguin.startAnimating()
  	}

添加滑行的动画

	    UIView.animate(withDuration: totalDuration - 0.02, delay: 0.0, options: .curveEaseOut, animations: {
        self.penguin.center.x += self.isLookingRight ? self.slideSize.width : -self.slideSize.width
    }) { (_) in
        
    }

动画完成后还原企鹅动画

	self.penguin.frame = CGRect(x: self.penguin.frame.origin.x, y: self.penguinY, width: self.walkSize.width, height: self.walkSize.height)
	self.loadWalkAnimation()

运行效果
image_2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值