说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

iOS UIView动画实践(二):Spring Animation与人机交互

HTML文档下载 WORD文档下载 PDF文档下载
本文为iOS UIView动画实践系列第二篇。在讲解如何使用UIKit创建最基本的视图动画后,作者以弹簧动画让UI变得鲜活起来,并将动画运用到人机交互中,让视图在用户点击操作时以动画的形式给予响应和反馈。

前言

通过上一篇文章,大家应该学会了如何使用'UIKit'创建最基本的视图动画,包括如何指定视图某属性的起始值和结束值,以及动画持续时间、动画延迟时间、动画选项等概念。

但是目前大家实现的动画不论是位置移动还是大小改变都是以一个单一的方向在运动,比如位置从A点到B点,大小半径从1到2:

图1

在这篇文章中,大家会学到更复杂一点的动画,让视图在一次动画中的运动轨迹像弹簧一样,有多次不同方向的运动,最后停止在终点:

图2

如果给位置移动的动画添加弹簧效果,那么视图的运动轨迹应该像下图中展现的一样:

图3

这会使你的动画看起来更逼真、更真实、更贴近现实。在某些情况下带给用户更好的用户体验。那么让我们开始学习吧。

Spring动画

我们还是以上一篇文章中的登录页面为例,大家应该发现了那个呆板的登录按钮吧,我们今天就让它Q弹起来。

打开ViewController.swift,在viewWillAppear()方法的底部添加如下代码:

self.loginButton.center.y += 30self.loginButton.alpha = 0

让登录按钮在屏幕呈现之前位置下移30,并且让它透明。然后在viewDidAppear()方法的底部添加如下代码:

UIView.animateWithDuration(1, delay: 0.5, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: .AllowUserInteraction, animations: {     self.loginButton.center.y -= 30     self.loginButton.alpha = 1}, completion: nil)

上述的代码大家是不是似曾相识,没错,依然是UIView的类方法,不过又多了两个参数:

  • usingSpringWithDamping:弹簧动画的阻尼值,也就是相当于摩擦力的大小,该属性的值从0.0到1.0之间,越靠近0,阻尼越小,弹动的幅度越大,反之阻尼越大,弹动的幅度越小,如果大道一定程度,会出现弹不动的情况。
  • initialSpringVelocity:弹簧动画的速率,或者说是动力。值越小弹簧的动力越小,弹簧拉伸的幅度越小,反之动力越大,弹簧拉伸的幅度越大。这里需要注意的是,如果设置为0,表示忽略该属性,由动画持续时间和阻尼计算动画的效果。

下面我们先来看看不同动力的效果:

  • 持续时间为3秒,阻尼为0.5,动力为1:
                                      
  • 持续时间为3秒,阻尼为0.5,动力为20:
                                       

initialSpringVelocity的值为1时,登录按钮上下弹力并不是很强劲,当设置为20时,登录按钮直接冲过了密码输入框,这就是动力的效果。

然后我们再看看不同阻尼的效果:

  • 持续时间为3秒,阻尼为0.1,动力为0:
                                       
  • 持续时间为3秒,阻尼为1,动力为0:
                                       

usingSpringWithDamping属性值为0.1时,表示阻尼很小,虽然没有动力因素的影响,但登录按钮弹动的幅度依然比较大,相当于在冰面滑行一样。当该属性为1时,表示阻尼非常大,可以看到登录按钮几乎是没有什么弹动的幅度。这就是阻尼的效果。

大家需要注意的一点是,弹簧动画并不只作用于位置的变化,它可以作用于所有动画属性的变化,比如我们在animations的闭包中除了位置的变化外,还有透明度的变化,它也同样有弹簧动画的效果,只不过它没有位置变化那么明显和贴近真实,它会表现出一闪一闪的效果:

                                       

大家可以尝试这几个属性不同值的组合,选出一个自己觉得满意的弹簧效果即可。

将动画运用到人机交互

上一节讲的弹簧动画的确可以让我们的UI变得鲜活起来,但这仅仅是看在眼里的,对于用户的操作却并没有什么响应和反馈。在这节会教大家如何让视图在用户进行点击操作时以动画的形式给予响应和反馈。

ViewController.swift中有一个名为login()的方法,关联了登录按钮的Touch Up Inside事件,在该方法中添加如下代码:

UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 0.0, options: .AllowUserInteraction, animations: {    self.loginButton.bounds.size.width += 25}, completion: nil)

此时每当我们点击登录按钮一次,它就会变胖一些。编译运行看一下效果:

                                       

我们可以再组合一个效果,使点击登录按钮时不仅让它变胖,还有轻微的向下弹跳效果。在login()方法底部添加如下代码:

UIView.animateWithDuration(0.3, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.0, options: .AllowUserInteraction, animations: {    self.loginButton.center.y += 10}, completion: nil)

编译运行看一下效果:

                                       

以上只是两个简单的将动画运用到人机交互的例子,大家可以在自己的项目中将一些用户的操作加上视图的动画反馈,让你的应用鲜活起来。

结束语

这一篇文章向大家讲解了UIView的Spring动画,以及将动画运用到人机交互中,使提升应用的用户体验,大家可以多多尝试Spring动画的各个属性,以及结合上一篇文章的知识,组合出更美妙的动画效果。下一篇文章会给大家介绍UIView的Transition动画,敬请期待。

作者简介:

付宇轩(@DevTalking),从事Java中间件开发、iOS开发。主要主持开发企业级ETL中间件、BPM中间件、企业级移动应用,个人博客地址:http://www.devtalking.com。


CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面,如果您有想分享的技术、观点,可通过电子邮件(tangxy#csdn.net,请把#改成@)投稿。

第一时间掌握最新移动开发相关信息和技术,请关注mobilehub公众微信号(ID: mobilehub)。


SMTP组件的使用方法-Delphi资料 Web Server程序开发环境的建立-Delphi资料 WEB数据库的开发-Delphi资料 Win32 行程通讯的观念与技术-Delphi资料 编程发送E-mail-Delphi资料 调用那个函数得到本机的IP-Delphi资料 动态改变/添加网络设置中的 TCP/IP 的 DNS 地址-Delphi资料 任何动态改变/添加网络设置中的 TCP/IP 的 DNS 地址-Delphi资料 如何在程序中动态取得Win98的网络邻居中的工作组及计算机名-Delphi资料 动态设置DNS地址-Delphi资料 读取IE收藏夹内网址的信息-Delphi资料 改网络计算机名-Delphi资料 关于WEB应用程序的打印组件开发初探-Delphi资料 基于TELNET协议的DELPHI程序与LINUX主机通信的实现 监视POP3信箱-Delphi资料 开发WEBMAIL程序-Delphi资料 开发响应用户输入的数据库web Server-Delphi资料 利用Delphi编程发送E-mail 利用Delphi编写Socket通信程序 利用Delphi开发网络数据库应用 在许多系统中,出于安全或其它原因,常常要求随时对键盘进行监控,一个专-Delphi资料 链接的视觉效果-Delphi资料 如何从域名名得到IP?-Delphi资料 如何动态改变/添加网络设置中的 TCP/IP 的 DNS 地址-Delphi资料 如何获取CapsLock 、 Insert 等键的状态?-Delphi资料 如何在程序中动态取得Win95/98的网络邻居中的工作组及计算机名?-Delphi资料 提高客户机/服务器应用系统性能的一些方法-Delphi资料 网络和通讯编程-Delphi资料 WebBrowser流程讲解及如何判断下载网页成功-Delphi资料 用Delphi 3.0实现运行于浏览器内的客户 用Delphi编写ASP的ActiveX 请问一个库存管理软件完成后,需要一个试用版,该怎么做呢? 问一个很简单的问题 怎样用vb打开一个可执行文件? 有哪位大侠知道WIN2000SERVER的访问网上邻居慢的解决方法,记得在网上有一篇关于这方面的文章不知在什么地方了,请各们告知。 请问在VFP中我要菜单生成器生成时,如果把系统菜单各工具栏去掉(其中有个“格式”,无法去掉) 怎样用VB进行拨号? 请问自己画一条和直线相切的圆弧,数学公式是什么? CSocket 是不是Create一下就可以Connect了?还要做别的吗? 请问:如何制作平面的下拉ComboBox??有代码最好 请问何处有下载《晚娘》? 不是我不想给分,是CSDN的服务器太慢了,想给都给不了 delphi中怎样引用一个数据集? 如何用java实现word文档(含图片和表格等)转换成html文件 vb中能不能再过程中定义全局的数组 当在TREEVIEW里CLICK某项时,想让LISTVIEW里的相应ITEM变成SELECTED(变为兰色选中)。 windows2000 professional 怎么屏蔽CTR+ALT+DEL 或任务管理器 成都的java程序员,请大家联系起来! 师傅出门了,还望哪位大侠能够指点一二..300分酬谢谢//小新的徒弟敬. 怎样创建一个弹出式子窗口在显示时父窗口同时为激活状态(标题栏为蓝色)? 急!请问如何在java的GUI界面上,点击一按钮,来运行一批处理文件?? 一个小问题!(不好意思问!) Dim cReg As New cRegistry 该引用哪个库(库的全名) 学习遇到的难题 特殊按钮 我想开发一个三层结构的进销存软件问题? 怦怦运气,看看有没有人知道,近来看看 请问有那个网站有关于ORACLE的入门书籍下载. 非常不错的delphi网站 我有一个问题想问问大家!!!有分送哟。 高价收购! 谁可以给我TSR完整的例程...(要有注释喔) 现在用的控件都是D版的,以后怎么注册软件啊? 请过了网络设计师的兄弟帮帮忙! 在C中,找一个字符或字符串在另外一个长字符串(64K)最后出现的位置,怎么实现最高效呢? 用 DHCP 分配了二个网段的IP地址。 “斑竹”在吗?象是只有你能够解决了!!!(附程序及错误代码!!!) 请问哪位仁兄知道SYGATE4.2 build 803的注册码? 如何在表单中阻止双引号??? 大虾们,帮我看看,这个错误和警告是什么原因造成的? 帮帮我吧 关于B/S报表? 怎样设置msflexgrid某一列的颜色? 用 DHCP 分配了二个网段的IP。 怎么能抓到密码? 在运行时想改变一个label的字体怎么改变,有没有做过的,label的属性在设计时是可以改的 fatal error C1010 找一个和VB的属性区一样的代码,控件或类库均可 如何调用在不同的窗体里自定义的过程 一个技术探讨问题,我想知道象在WORD等软件中插入图形或图象后,还能把它选择,并移动是怎样实现的? 请问:在另一个.asp文件中如何调用相同的变量? WEB初级应用问题 4x的n+2次幂-9x的n次幂+6x的n-1次幂-x的n-2次幂分解因式的题,n是整数且n>2 观察下列单项式:0.3x的二次方,8x的三次方,15x的四次方,24x的五次方,按此规律写出的第13个单项式是? 为什么这个函数当n等于奇数时为奇函数,n等于偶数时为偶函数? 弯头长度怎么计算啊? 0,3x的二次方,8x的三次方,15x的四次方,24x的五次方.按上面规律写出第13个单项式;猜想:第n个 在数a(a不等于0)后面添上百分号,这个数就( )A扩大100倍B缩小100倍C不变 弯头的外弧长度计算公式? 观察下列单项式:0 3x的二次方 8x的三次方 15x的四次方 24x的五次方 … 按此规律写出第十个单项数是() 六年级·上·数学·数的整除甲、乙两数的最大公约数是15,最小公倍数是90,这两个数是( )或( ) 化工管道中45度的弯头的计算长度公式是什么拜托各位了 3Q 观察下列单项式;0,3x的平方,8x的三次方,26x的四次方,24x的五次方……按此规律写第13个单项式是? 第一节 单元提高性训练已知m整除87,那么m是……………………………………( )A奇数 B 偶数 C 奇数或偶数 D 不能确定一个数如果被4、5除,商是正整数,余数是1,那么这个数最小是多少?并求出 怎么计算弯头长度 1是奇数吗?有册数学书上说1不是奇数也不是偶数. 六年级数和数的整除测试题【数学高手进,十万火急啊】一、下面的数中,哪些是合数,哪些是质数.1、13、24、29、41、57、63、79、87 合数有()质数有() 初中数学竞赛,数的整除性对于自然数n,将其个位数字之和记为an,如a2009=2+0+0+9=11,a2010=2+0+1+0=3,则a1+a2+a3+...+a2009+a2010=( D )A.28062 B.28065 C.28067 D.28068我要详解,你的具体算法 等比数列An共有偶数项,且所有项之和是奇数之和的3倍,前3项之积等于27,前这个等比数列的通项公式 有没有一个函数,既是奇函数又是偶函数的?请举个例子并说明原因! 无功功率计算公式无功功率计算方式,Q=* 3 / U / {像}9{符号} / I /{像}9{符号} / sin{像}9{符号}[var] 各们师傅们帮下忙啦, 有什么公式直接算出X长度? 奇函数加偶函数,奇函数加奇函数,偶函数加偶函数分别是什么函数,并请举例如题,请一定举例. 有功功率的计算公式是什么 无功功率怎么计算 过椭圆其中一个焦点作垂直于x轴的直线的长度公式是什么? 什么样的函数既是奇函数又是偶函数,多举几个例子并加以解释 有功功率和无功功率的计算公式是什么?哪位师傅知道的告诉下 用此公式 钢管的重量=(0.0245 x 钢管直径 x 钢管厚度 x 钢管长度 ) /1000转换 算出来的是理论价比进价高 举出既是奇函数又是偶函数的函数例子要求带图像 电容和电感模型,无功功率一般我们认为电容发出无功功率,电感吸收无功功率,那么,可不可以这样理解,一般认为电容都是充满了电,而电感是没有电的 2000个8相乘的积的个位数字是几 请举例子说明非奇非偶函数和既是奇函数又是偶函数的特点,请从其定义域等方面一一举例说明,非常感谢(鞠躬)~ 0.85是由()个十分之一和()个百分之一组成的 请问有没有畸变无功功率计算公式? 奇函数的偶数项系数等于0,偶函数的奇数项系数等于0, 运用乘法公式计算2014的平方-14 的平方 5张卡片上分别写着3,4,5,6,7.任意抽出2张,积是双数算我赢,积是单数算你赢.(1)两张卡片的数字积一共有多少种情况?你能把所有的可能情况简单表示出来吗?(2)这个游戏公平吗?为什么? 幂函数中,y=x^a,a是偶数,则为偶函数;a是奇数,则为奇函数?还有个问题:增函数+增函数=增函数;增函数+减函数=减函数?可以单凭这样判断吗? 2.58是由几个一几个十分之一和几个百分之一组成,也可以看做几个百分之一 整数的整除如果(x+2)(x+a)的积中不含x的一次多项式那么常数a的值为________.最好要过程 打印一份稿件,甲要独做需要用8小时,乙要独做工作效率可以比甲提高20%,照这样计算,乙要独做4小时的任务,若由甲独做完成,要用几小时?(用比例解答) 2.58可以看作是由几个百分之一组成 奥数整数的整除在十进制中,各位数字均是0或1,并且能被225整除的最小自然数是多少? 请问奇函数的奇数次方是奇函数还是偶函数,偶数次方呢?还有偶函数的奇数次方是奇函数还是偶函数,偶数次方呢?例如(sinx)^n,n分别为奇数偶数(cosx)^n,n分别为奇数偶数 2.58是由几个百分之一组成的? 圆弧长度公式求弧长,公式就行 小学六年级升初中数学测验卷!俺滴数学课本不翼而飞,明天就要分班考试了,数学还没有复习,杯具呀~!!给点测验卷吧~~~~!!!! 2.58是多少百分之一组成的? 计算圆弧长度的公式, 我想知道一个简单画椭圆的公式`大小都可以用的上~我是做木工的.要说的详细点哦.最好附图 任意取出1992个连续自然数,它们的总和是奇数还是偶数? 0是偶数还是奇数 木工吊顶中怎么画椭圆 任意取出1234个连续自然数,它们的总和是奇数还是偶数? 0是偶数还是奇数啊谢谢了 谁知道做拉线用的钢绞线GJ-35、50、70的单位长度重量啊,不同大小规格的拉线按照什么标准选取? 当x=2008是,求x的3次幂-5x的平方-x的3次幂-x的平方+2x+6x的平方-1的值 0 到底是偶数 还是奇数 算木工建筑图纸上的梁口和梁的长度怎么算 已知x的平方-3x+1=0,求x的四次幂-3x的三次幂-x的平方+6x+3 “0”是奇数还是偶数?答案只要写是和不是就ok 既然奇函数的偶数项系数等于0,偶函数的奇数项系数等于0.那么跟常数项是否有关?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn