摘要

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

这里面要梳理的逻辑就是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, 就停止动画。


func guideAnimations() {
// 动画执行 3 次
var count = 3
// 开始动画
startAnimation {[weak self] in
guard let self = self else { return }
count -= 1
if count == 0 { self.guideImageView.isHidden = true }
}
} // 设置并开始动画
func startAnimation(_ complete: @escaping ()->()) {
if self.guideImageView.isHidden { return } UIView.animate(withDuration: 1, delay: 0, options: .curveEaseInOut) {
self.guideImageView.transform = self.guideImageView.transform.translatedBy(x: -50, y: 0) } completion: { [weak self](finish) in
// 动画结束时,将控件复原
guard let self = self else { return }
self.guideImageView.transform = self.guideImageView.transform.translatedBy(x: 50, y: 0)
// 先返回闭包,然后再执行动画函数
complete()
self.startAnimation(complete)
}
} // 停止动画
func stopAnimation() {
if self.guideImageView.isHidden == false {
self.guideImageView.isHidden = true
}
}

Swift-使用transform 实现重复平移动画的更多相关文章

  1. Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)

    在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Ani ...

  2. Android 手机卫士--平移动画实现

    本文实现如下几个界面之间的平移动画实现 本文地址:http://www.cnblogs.com/wuyudong/p/5954847.html,转载请注明出处. 分析: 导航界面移动过程中,平移动画 ...

  3. iOS - (简单平移动画/弹出View的使用)

    在iOS 开发中,使用平移动画的频率越来越高,给人的感觉就是很炫酷很流畅,起到增强用户体验的作用.在APP开发中实现动画效果有很多种方式,但我目前是使用较多的是平移动画,顺便也在此做一些小小的总结,大 ...

  4. jQuery使用伪递归重复执行动画

    使用setInterval()来重复执行动画,会因为动画执行过程的时候,setInterval()的时间依然是在走的,所以会导致动画的调用时间不理想,因此只能使用递归来重复执行动画. // 首页LOG ...

  5. Activity平移动画

    Activity平移动画 效果图 添加动画文件 在res下添加anim文件夹,在anim下添加几个动画文件,分别是进入和退出的动画时间和移动距离,属性很简单,一看就懂,不磨叽了. tran_next_ ...

  6. Android平移动画

    Android平移动画 核心方法 public void startAnimation(Animation animation) 执行动画,参数可以是各种动画的对象,Animation的多态,也可以是 ...

  7. 049——VUE中使用animation与transform实现vue的动画效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. ArcGIS api for javascript——地图配置-定制平移动画

    描述 本例展示了当用户点击平移按钮时如何定制地图的动画.panDuration和panRate是Dojo动画属性,可以分别确定动画的duration和帧刷新的rate.这些属性的单位都是毫秒,panD ...

  9. 你会用swift创建复杂的加载动画吗(1)

    时至今日,iOS 应用商店已经拥有超过了140万 应用,让你自己的应用脱颖而出确实是个不小的挑战.不过,在你的应用掉入默默无闻的大黑洞之前,你拥有一个小小的机遇窗,它能帮你吸引用户的注意. AD: 时 ...

随机推荐

  1. 转载 | Scala 如何避免使用 Null

    在 Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的. Scala 的 Option类型 Scala在变量和函数返回值可能不会引用任何值的时候使用 Option 类型 ...

  2. TinyML-TVM是如何驯服Tiny的(下)

    TinyML-TVM是如何驯服Tiny的(下) Lazy Execution实际上,随着通信开销开始占主导地位,一旦用户请求,就执行算子的开销变得非常昂贵.可以通过延迟评估直到用户需要调用的结果来提高 ...

  3. MLPerf结果证实至强® 可有效助力深度学习训练

    MLPerf结果证实至强 可有效助力深度学习训练 核心与视觉计算事业部副总裁Wei Li通过博客回顾了英特尔这几年为提升深度学习性能所做的努力. 目前根据英特尔 至强 可扩展处理器的MLPerf结果显 ...

  4. [NOIP1998 提高组] 拼数

    题目描述 设有 n 个正整数​ a1-an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数. 输入格式 第一行有一个整数,表示数字个数 n. 第二行有 n 个整数,表示给出的 n 个整数 a_ ...

  5. maven 安装、下载、配置,idea中的maven设置

    1.从Maven官网下载压缩包 2.将压缩包解压到你像放置Maven的路径,我放置在D:\0_FileSave\Maven 3.创建本地仓库  MavenRepository 在Maven解压路径下D ...

  6. 重新整理 .net core 实践篇—————文件系统[二十二]

    前言 简单介绍一下文件系统. 正文 文件系统,主要是下面3个接口组成: IFileProvider IFileInfo IDirectoryContents 那么他们的实现是: physicalFil ...

  7. 记一次项目中解决 -- 并发减库存超卖问题过程(Java)

    起因:项目中要做预约功能,首先每天的余票都是有上限的,自然不能出现超卖的情况 基于我们项目是单体分布式的springcloud部署,我想了下 第一种方法,直接mysql加行锁,要update这条库存数 ...

  8. OpenCV随笔

    创建一个窗口#zeros(shape,dtype=float,order='C')#shape:形状,dtype:数据类型,可选参数,默认numpy.float64img = np.zeros((50 ...

  9. .NET Core/.NET5/.NET6 开源项目汇总8:Blazor项目

    系列目录     [已更新最新开发文章,点击查看详细] Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...

  10. Windows10 上Docker 安装运行Consul

    背景简介 Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面. 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格. Consul需要数据平面并 ...