经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Swift » 查看文章
Swift使用transform 实现重复平移动画效果
来源:jb51  时间:2021/7/21 12:33:45  对本文有异议

摘要

要实现一组重复的动画,本质上就是找到动画开始点、结束点。在动画结束的时候,触发开始点,持续这样的动作。

这里面要梳理的逻辑就是1.触发开始点和2.监听动画结束点。这两个逻辑是实现重复动画的基础。

应用场景

将 imageView 等 UI 控件,设置成平移的动画,并且一直动画中。

transform 可以实现控件的平移,但是无法连续动画。

API 及语言

核心逻辑/代码

transform 可以将控件平移,为了达到连续动画,可使用递归方式实现。

动画实现

设置动画并开始
使用 UIView.animate(withDuration: , animations: , completion: ) 函数设置动画。

这个方法有开始动画事件,也有监听动画完成事件(completion 方法)

实现连续动画

在completion 中递归调用开始动画函数,达到连续动画的效果。

停止动画

设置一个全局的标示,来记录动画的状态,也可以通过更改这个状态来判断是否需要开始动画,比如设置 UI 控件的isHidden属性,实现停止动画

细节

在开始动画的时候,就进行判断,如果isHidden为 true,则直接停止动画。可以精准控制动画的次数。

在开始动画函数中设置闭包,可以在闭包中设置停止动画的代码等。

示例代码

重复 3 次平移动画,在每次动画开始前都判断self.guideImageView.isHidden, 在动画过程中,如果要停止动画,只需设置 self.guideImageView.isHidden = false, 就停止动画。

  1. func guideAnimations() {
  2. // 动画执行 3 次
  3. var count = 3
  4. // 开始动画
  5. startAnimation {[weak self] in
  6. guard let self = self else { return }
  7. count -= 1
  8. if count == 0 { self.guideImageView.isHidden = true }
  9. }
  10. }
  11. // 设置并开始动画
  12. func startAnimation(_ complete: @escaping ()->()) {
  13. if self.guideImageView.isHidden { return }
  14. UIView.animate(withDuration: 1, delay: 0, options: .curveEaseInOut) {
  15. self.guideImageView.transform = self.guideImageView.transform.translatedBy(x: -50, y: 0)
  16.  
  17. } completion: { [weak self](finish) in
  18. // 动画结束时,将控件复原
  19. guard let self = self else { return }
  20. self.guideImageView.transform = self.guideImageView.transform.translatedBy(x: 50, y: 0)
  21. // 先返回闭包,然后再执行动画函数
  22. complete()
  23. self.startAnimation(complete)
  24. }
  25. }
  26. // 停止动画
  27. func stopAnimation() {
  28. if self.guideImageView.isHidden == false {
  29. self.guideImageView.isHidden = true
  30. }
  31. }

到此这篇关于Swift使用transform 实现重复平移动画效果的文章就介绍到这了,更多相关transform 重复平移动画内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号