动画在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. iOS-开启arc之后 NSNotificationCenter removeObserver 是否需要调用
  2. 用ffmpeg把gif动图分离成多张图片和ffmpeg多张图片合成gif动图
  3. Shell多线程操作及线程数控制实例
  4. java代码_35个Java 代码优化细节
  5. 熊猫分发_熊猫新手:第一部分
  6. Python实例讲解 -- wxpython 基本的控件 (按钮)
  7. Xilinx Zynq-7000 嵌入式系统设计与实现
  8. linux中hadoop环境变量配置文件,Ubuntu中关于hadoop环境变量的设置方法
  9. Linux平台中使用PHP让word转pdf
  10. 萌新的Python练习菜鸟100例(十六)输出指定格式的日期。
  11. python使用codecs模块进行文件操作-读写中英文字符
  12. Android Service 详解一:概述
  13. 力扣-868 二进制间距
  14. FlyMcu 串口无法打开 串口被占用
  15. linux c++ 时间戳转换,C++时间戳转换成日期时间的步骤和示例代码
  16. 【腾讯云】企业认证题库200题
  17. 微信更换绑定手机人工服务器,微信更换已绑定手机号码的操作方法
  18. 海马玩模拟器——搭建React Native环境
  19. 2017.08.18【NOIP提高组】模拟赛B组 沙耶的玩偶(doll)
  20. 三菱q plc modbus通讯协议详解_三菱Q系列PLC与昆仑通态触摸屏以太网通讯

热门文章

  1. 胶体金纳米颗粒粒径为20~80 nm齐岳生物提供单分散,小粒径及不同粒径大小的金纳米粒子AuNPs
  2. 微信编辑器 wxEditor 最牛逼的富文本编辑器
  3. 大一作业HTML网页作业:简单的旅游 1页 (旅游主题)
  4. iOS 怎么查app的下载量
  5. 手机存量市场下的激烈角逐:VO荣米格局初定
  6. python 合成gif与拆分gif为png图片
  7. 改造家里的开关成为智能开关,保留原有开关控制,零火版,射频遥控器篇(二)
  8. 123茶楼,众筹...
  9. 「星火计划沙龙视频」腾讯Caelus在离线混合部署方案揭秘
  10. 计算机假期计划内容,2019寒假计划,超详细学习计划表