Swift-使用transform 实现重复平移动画
摘要
要实现一组重复的动画,本质上就是找到动画开始点、结束点。在动画结束的时候,触发开始点,持续这样的动作。
这里面要梳理的逻辑就是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 实现重复平移动画的更多相关文章
- Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)
在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Ani ...
- Android 手机卫士--平移动画实现
本文实现如下几个界面之间的平移动画实现 本文地址:http://www.cnblogs.com/wuyudong/p/5954847.html,转载请注明出处. 分析: 导航界面移动过程中,平移动画 ...
- iOS - (简单平移动画/弹出View的使用)
在iOS 开发中,使用平移动画的频率越来越高,给人的感觉就是很炫酷很流畅,起到增强用户体验的作用.在APP开发中实现动画效果有很多种方式,但我目前是使用较多的是平移动画,顺便也在此做一些小小的总结,大 ...
- jQuery使用伪递归重复执行动画
使用setInterval()来重复执行动画,会因为动画执行过程的时候,setInterval()的时间依然是在走的,所以会导致动画的调用时间不理想,因此只能使用递归来重复执行动画. // 首页LOG ...
- Activity平移动画
Activity平移动画 效果图 添加动画文件 在res下添加anim文件夹,在anim下添加几个动画文件,分别是进入和退出的动画时间和移动距离,属性很简单,一看就懂,不磨叽了. tran_next_ ...
- Android平移动画
Android平移动画 核心方法 public void startAnimation(Animation animation) 执行动画,参数可以是各种动画的对象,Animation的多态,也可以是 ...
- 049——VUE中使用animation与transform实现vue的动画效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ArcGIS api for javascript——地图配置-定制平移动画
描述 本例展示了当用户点击平移按钮时如何定制地图的动画.panDuration和panRate是Dojo动画属性,可以分别确定动画的duration和帧刷新的rate.这些属性的单位都是毫秒,panD ...
- 你会用swift创建复杂的加载动画吗(1)
时至今日,iOS 应用商店已经拥有超过了140万 应用,让你自己的应用脱颖而出确实是个不小的挑战.不过,在你的应用掉入默默无闻的大黑洞之前,你拥有一个小小的机遇窗,它能帮你吸引用户的注意. AD: 时 ...
随机推荐
- Python+Selenium学习笔记7 - os模块
os模块是关于文件/目录方面的 导入语法 import os 相关方法 path.abspath() 用来获取当前路径下的文件 os.path.abspath('checkbox.html') ...
- Mobileye高级驾驶辅助系统(ADAS)
Mobileye高级驾驶辅助系统(ADAS) Mobileye is the global leader in the development of vision technology for Adv ...
- TensorFlow+TVM优化NMT神经机器翻译
TensorFlow+TVM优化NMT神经机器翻译 背景 神经机器翻译(NMT)是一种自动化的端到端方法,具有克服传统基于短语的翻译系统中的弱点的潜力.本文为全球电子商务部署NMT服务. 目前,将Tr ...
- 鱼眼摄像头SLAM
鱼眼摄像头SLAM 在机器人技术.摄影测量学和计算机视觉等领域,鲁棒相机位姿估计是许多视觉应用的核心.近年来,在复杂.大规模的室内外环境中,人们越来越关注相机位姿估计方法的实时性.通用性和可操作性.其 ...
- TensorFlow六种激活函数
TensorFlow六种激活函数 每个神经元都必须有激活函数.神经元提供了模拟复杂非线性数据集所必需的非线性特性.该函数取所有输入的加权和,进而生成一个输出信号.把它看作输入和输出之间的转换.使用适当 ...
- Ascend Pytorch算子适配层开发
Ascend Pytorch算子适配层开发 适配方法 找到和PyTorch算子功能对应的NPU TBE算子,根据算子功能计算出输出Tensor的size,再根据TBE算子原型构造对应的input/ou ...
- Java Spring boot 多商户入驻 外卖|跑腿|代驾 Uniapp版本
技术说明: 源码下载:https://www.yuanmahy.com/8357.html 开发环境:jdk1.8,mysql5.7,node 9.4,redis6.2,npm6.9 开发工具:前端使 ...
- 从Vehicle-ReId到AI换脸,应有尽有,解你所惑
最近在做视频搜索的技术调研,已经初步有了一些成果输出,算法准确性还可以接受,基本达到了调研的预期.现将该技术调研过程中涉及到的内容总结一篇文章分享出来,内容比较多,初看起来可能关系不大,但是如果接触面 ...
- tree (一本通练习||清华集训互测)
tree 内存限制:512 MiB 时间限制:3000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有nee ...
- sys用户无法远程登陆
1.用sys用户远程登陆 [oracle@edbjr2p2 admin]$ sqlplus system/oracle@PROD3 as sysdbaSQL*Plus: Release 11.2.0. ...