动画在iOS开发中有举足轻重的作用,通过动画你可以让你的用户了解他究竟干了什么,下面是一个简单的演示动画:

现在跟着我的步伐一起来学吧

给动画添加添加持续时间


首先创建一个新的swift Playground,给他命名为“FlyingSquares”,接着要导入“PlaygroundSupport”。

import UIKit
import PlaygroundSupport

下面我们要建立一个画布来让我们能够在上面画画:

// --- 创建一个大小都为为500的画布 ---
let liveViewFrame = CGRect(x: 0, y: 0, width: 500, height: 500)
let liveView = UIView(frame: liveViewFrame)
liveView.backgroundColor = .red // 注意为了方便看画布在哪里,我在这里把画布设为红色PlaygroundPage.current.liveView = liveView

当你明白画布在哪里之后就把背景色改成白色吧

liveView.backgroundColor = .white

接着我们在画布里创建一个正方形

let smallFrame = CGRect(x: 0, y: 0, width: 100, height: 100)
let square = UIView(frame: smallFrame)
square.backgroundColor = .redliveView.addSubview(square) // 把正方形添加到画布里

好嘞,前期工作完成了,现在我们来添加一个小动画让他变成橘黄色通过使用 UIView.animate(withDuration:) 来实现

UIView.animate(withDuration: 3.0) {square.backgroundColor = .orange
}

如果你现在运行一下代码你将会看到正方形是如何变色的

当然除了变色,你还可以使它动起来。例如:我们让它放大地跑到中间去:

UIView.animate(withDuration: 3.0) {square.backgroundColor = .orangesquare.frame = CGRect(x: 150, y: 150, width: 250, height: 250) // 通过新的位置来让正方形移到想要去的地方
}

通过添加一行新代码你可以看到

使用闭包来添加新动画


但是呢,如果你想要让它再从中心点到右上角要怎么搞呢?
如果你只是单词地再添加一个方法:

UIView.animate(withDuration: 3.0) {square.backgroundColor = .redsquare.frame = CGRect(x: 400, y: 0, width: 100, height: 100) // 让正方形去往右上角
}

运行的时候你就会发现它居然直接向右边行走了,根本没有到达中间点,这个时候要怎么办呢?别慌,我们还有闭包可以用,在一开始我们省略了 UIView.animate(withDuration: , animations: ) 里面的一个参数,利用第二个参数我们就可以添加下一个动画了

UIView.animate(withDuration: 3.0, animations: {square.backgroundColor = .orange   // 改变正方形的颜色square.frame = CGRect(x: 150, y: 150, width: 250, height: 250) // 让正方形移动到中间位置
}) { (_) in  // 使用闭包来完成下一个动画UIView.animate(withDuration: 3.0) {square.backgroundColor = .red   // 改变正方形的颜色square.frame = CGRect(x: 400, y: 0, width: 100, height: 100) // 让正方形从中间移动到右上角}
}

运行一下就会看到我们想要的效果啦

添加延迟或自定义选项


注意到animate除了有两个参数的还可以有四个参数的 UIView.animate(withDuration: , delay: , options: , animations: , completion: ) 通过此方法我们可以让动画持续播放。其中,delay参数表示延迟动画开始的秒数。 options参数是用于自定义动画的预定义选项数组。”

例如,我们让它延迟2秒并且一直重复,我们可以这么做:

UIView.animate(withDuration: 3.0, delay: 2.0, options: [.repeat], animations: {square.backgroundColor = .orangesquare.frame = CGRect(x: 400, y: 400, width: 100, height: 100)}, completion: nil)

运行的时候你就可以看到正方形在不断重复一个动作:

变换属性


swift提供了三个常用的图形变换方法,具体为:Scale(按比例扩大或缩小)、Rotate(旋转)、Translate(改变位置)

它们都申明在CGAffineTransform这个结构体里面,具体的用法如下:

UIView.animate(withDuration: 3.0) {square.backgroundColor = .orangelet scaleTransform = CGAffineTransform(scaleX: 2.0, y: 2.0) // 按比例放大2倍let rotateTransform = CGAffineTransform(rotationAngle: .pi) // 此处设定旋转角度,pi为180度,想要什么角度就进行简单的乘法或除法即可let translateTransform = CGAffineTransform(translationX: 200, y: 200) // 设定最终移动到哪一个位置let comboTransform = scaleTransform.concatenating(rotateTransform).concatenating(translateTransform) // 将所有效果都组合起来square.transform = comboTransform
}

运行的时候你将会看到:

使用identity来撤销刚刚实现的动画


在刚刚的示例里面我们改变了正方形的位置、颜色,还让它旋转到达中间,但是如果我们要在让它回去要怎么办呢?如果再写一遍相同的代码有些繁琐,CGAffineTransform提供了一个好用的属性identity来帮我们解决这个问题。

和一开始的方法一样,我们通过闭包来添加让正方形回到原位的动画:

UIView.animate(withDuration: 3.0, animations: {square.backgroundColor = .orangelet scaleTransform = CGAffineTransform(scaleX: 2.0, y: 2.0)let rotateTransform = CGAffineTransform(rotationAngle: .pi)let translateTransform = CGAffineTransform(translationX: 200, y: 200)let comboTransform = scaleTransform.concatenating(rotateTransform).concatenating(translateTransform)square.transform = comboTransform}) { (_) inUIView.animate(withDuration: 3.0) {square.transform = CGAffineTransform.identity // 注意identity只能撤销使用CGAffineTransform产生的效果,无法修改正方形的颜色}
}

运行一下你将会看到:

到此,简单的动画讲完啦。

深入学习动画效果


一篇文章是不能把所有的动画讲完的,如果你还想要知道更多的关于动画的知识,可以访问下面两个网址:

  1. 更多的animation,请访问:About Core Animation
  2. 更多有关CGAffineTransform的知识请访问:CGAffineTransform

后记


如果你喜欢我的文章欢迎来点赞、评论和收藏,如果你有任何不清楚的地方欢迎来和我探讨。?

给你的App添加动画效果相关推荐

  1. android 桌面动画,Android 如何在Launcher的桌面滑动时添加动画效果? M

    正文 目前的Launcher桌面滑动时,是没有动画的.如何在Lancher的桌面滑动时添加动画效果?Demo: 请修改Workspace.java的screenScrolled方法,如下: @Over ...

  2. uni-app中自定义图表(canvas实现chart图表)开发篇(5)-圆环进度条添加动画效果

    这里增加一篇介绍下进度条动画效果如何添加,前几篇的进度值被修改后,切换效果比较生硬.另外也在第四篇基础上,对图形略作修改.在查看uniapp文档时,没有发现重绘执行函数,小程序中有Canvas.req ...

  3. ppt模板怎么统一添加动画效果?

    ppt模板动画效果可以很好的提升ppt模板的观赏性和质感,现在ppt模板制作都自带一些动画效果,怎么使用这些动画效果呢?ppt家园来介绍一下统一给ppt模板素材添加动画效果的方法. 模板入口:http ...

  4. 原生js添加动画效果

    原生js添加动画效果 html 这个图片是使用阿里图标需要下载 <div class="content"><div class="contAnimati ...

  5. 第9章第7节:给目录页幻灯片中的元素添加动画效果 [PowerPoint精美幻灯片实战教程]

    在完成目录页的制作之后,现在来给幻灯片中的元素添加动画效果.首先选择需要添加动画效果的对象. 点击动画选项卡,显示动画功能面板. 然后给所选对象添加名为淡化的动画效果. 将动画的开始方式设置为上一动画 ...

  6. 第9章第3节:给封面幻灯片中的元素添加动画效果 [PowerPoint精美幻灯片实战教程]

    您将在本节给幻灯片中的所有元素添加动画效果,首先在此处按下并向右下方拖动,以选择折线图表中的所有元素. 点击动画选项卡,显示动画功能面板. 然后给所选对象添加名为形状的动画效果. 接着选择位于上方的企 ...

  7. 直播APP常用动画效果

    作者: 落影loyinglin 地址: http://www.jianshu.com/p/a9a201ed3aa8 介绍 记录.总结开发遇到一些问题,大家一起交流学习. 这次带来,对直播APP的常用动 ...

  8. 给网页图标字体 Font Awesome 添加动画效果

    在国外网站中使用Web字体已经流行起来,虽然使用中文不太靠谱,但我们可以使用图标字体,也是很是方便的,图标字体有很多,可看<30个免费网页图标字体以及使用方法>一文,其中Font Awes ...

  9. Layout动画:在android布局发生变化时添加动画效果

    layout动画在每次布局发生变化的时候系统调用的一个预加载动画效果,使用layout动画可以让布局的变化过度看起来更自然.使用起来很简单,只需在控件中添加一个属性就可以了,系统默认是不会启动layo ...

最新文章

  1. 12、OpenCV实现图像的空间滤波——图像平滑
  2. 从头开始 Struts 2 入门
  3. cobbler 无人值守-安装
  4. javascript高级程序设计之面向对象的程序设计
  5. 11. jsp与servlet之间页面跳转及参数传递实例
  6. 【Cocos2d实例教程一】xcode5下Cocos2d环境的搭建
  7. mysql拼图游戏代码_Java小项目之拼图游戏
  8. Android Studio 设置编辑器背景颜色
  9. 【Arduino】OTTO机器人(做二次开发的一点点总结)
  10. WebRTC通话原理(六)
  11. python复杂网络库networkx:基础
  12. 欧几里得算法(辗转相除法)求最大公约数,原理及实例
  13. IDEA中Ctrl+Shift+f快捷键无效的解决方式
  14. Oracle数据库学习笔记(十五)--自连接
  15. Excel:用VBA添加分页符
  16. Windows10 Windows许可证即将过期
  17. 《微积分:一元函数微分学》——导数公式
  18. ⅰsee是什么意思_see是什么意思
  19. java免费获取物流信息
  20. C语言实现Prim算法与Kruskal算法(浙大 陈越版)

热门文章

  1. 小程序  跳转web-view  点击左上角返回需要点击2次才能返回
  2. 蓝牙耳机哪个品牌比较好?盘点四款好用的蓝牙耳机
  3. Python OpenCV 物体识别
  4. 轻言壁纸微信小程序源码
  5. 逍遥模拟器代理Charles与Burpsuite联动
  6. 【基于深度学习的脑电图识别】应用篇:DEEP LEARNING APPROACHES FOR AUTOMATIC ANALYSIS OF EEGS
  7. easyui中combobox级联问题
  8. SQLyog 报错2058 :连接 mysql 8.0.11 解决方法
  9. [ZJOI2014]力 题解
  10. Win10输入法移除未知区域设置(qad-Latn) 美式键盘