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

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)。


在vb中让控件大小和位置随着表单的大小成比例变化的方法 在VB中实现闪动标题栏 在VB中实现位图的透明放置 在VB中使用数据窗体设计器插件 在VB中制作单独程序封面的两种方法 在VB中制作透明按钮 在Visual Basic中如何拖动窗体或控件 在Visual Basic中显示动态运行进度 在菜单中加入图标 -VB资料 在程序中调用关闭Windows对话框-VB资料 在任务栏中显示无边框窗体的图标-VB资料 在系统菜单上添加自定义菜单项 -VB资料 在运行时动态生成多个相同的控件?-VB资料 在最小化状态时提供提示 -VB资料 暂时禁止窗口更新-VB资料 VB怎样得到文本框(TextBox)中的文本行数? 制造出透明的Form -VB资料 VB制作半透明窗体和形状不规则的窗体 VB制作方向按钮 VB制作渐变的窗口背景色 字体闪烁 -VB资料 自动改变控件大小-VB资料 自制IE风格按纽控件-VB资料 VB6.0中通过MSChart控件调用数据库 用VB6实现动态增减控件 ActiveX控件的创建-VB资料 ADO控件和DATA控件的冲突(不能共存)的解决方法-VB资料 Combo的自动查询技术 -VB资料 DirectX7.0使用心得(1) -VB资料 DirectX7.0使用心得(2) -VB资料 DirectX7.0使用心得(3) -VB资料 关于在 servlet 中,service 以及 doGet、doPost应用的问题?!------------请进:) 怎样得到用odbc创建的数据库类型信息 使用AfxBeginThread,将一个类CDownload down作为参数传递给线程,该怎么传递和接受参数??? 如何判断用户关闭了浏览器窗口还是转入了其他地址,或者刷新了页面? 大家谁作过数据导入导出的程序阿,能不能给点指点阿!急!!!! 新手求救:如何发布一个用JAVA/JSP/SQL SERVER开发的系统!!! SQL里update的使用问题 今天辞职,散分散分散分! 我form中一select中的option被选中,在提交后,如何用javascript来保存选中的那个option 怎样调用约定为CDECL的DLL? 弹出菜单的位置问题,简单,快进 LINUX下的虚拟主机的问题 用过网上的G711-G721-G723代码做语音压缩的请进,高分 在98上安装了apache+php+mysql,让用287端口测试,287端口是什么 字体设置, LogFont的lfFaceName... 关于随机 新手问题 如何动态改变 RichEdit 中的字体?很急! !!!怎样把stringgrid中已经选择得数据读出来!!!! 我该学些什么? CObject类是MFC类吗? 请问除了http://java.sun.com/j2se/1.4/download.html外,哪里还有jdk1.4下载? 有没有兄弟做过关于DSP与PC的并行通信? 请教接口查询的问题 如何清空表中的全部记录? 我是一个vb 的初学者,请大家介绍一两本好的关于数据库开发的书! 《Delphi淡手辑略 之 数据库篇》:数据安全保存(函数) DB2 store procedure Easy_Problem!!!关于对话框!!! weblogic下调用java bean出了点问题 (苯苯) 如何在两地用netmeeting通信,共享信息,两方为win98和win2000server,使用modem连接 tomcat 如何与 jboss 进行集成 Regular DLL中向导生成的winapp对象有什么用? 关于Install shield 的问题 一个高难度问题,特急! 从一个页的Button事件中如何获取在iframe中另一页中选种checkbox的值? 大家一起来帮帮我 我是个新手请教如何在98下安装和设置apache,尽是详细些,最好给介绍些资料 高手请教,有关类的链表指针 如何定义日期类型? 请教高手!如何执行带条件SQL语句? 大家一起来为c#加油阿 追女教训谈 如何用OUTLOOK作多用户使用???? 赐教 有谁知道ramdrive.sys在dos下的详细用法,敬请赐教,倍感感激!! 怎么用Delphi调用MySql(win) 关于frame的问题. 为什么显示不出来???? c#通过INTERNET远程访问数据库都有什么办法?(请高手指点) 有誰能把CDONTS.DLL(電子郵件)的源代碼貼出來嗎?有分送,THANK! 请教 NetColorWolf(NCW) pb7的工具条栏的文字字体! 英语翻译It might be worthwhile to give your attitude towards study a second thought.每个单次的意思我都知道但是就是读不懂. 用方程解,是天才的快来帮我 病毒,主要的生物致癌因素有哪些? 第5秒时是指哪一段时间?有人说是0-5秒, 瓷片电容的读法.如瓷片电容电标有104,其容量是多少.还有1F=-uF=-pF=-nF? 引起癌细胞病变的因素有哪些? 第4秒末就是第5秒初,指的是时刻这句话对吗?为什么? 瓷片电容103什么意思手头有块板子,上面的瓷片电容上面就只有103这个标注,还有一种是标注104的.请问下,上面的 103 104 ①在适宜条件下,癌细胞能够,. ②癌细胞的,发生显著变化. ③癌细胞的,发生了变化,细胞膜上的,等物质减少,使得癌细胞彼此之间的,显著降低,容易在体内分散和转移 第四秒末,第五秒初是指同一个时刻不 !要不是那它指的是什么 0-2s间到底是几秒?这些文字问题有归纳吗? 朝花夕拾全面人物分析 5秒末是指一段时间还是一个时刻啊啊 我感觉是一段时间啊 朝花夕拾 赏析 在公式s=vt+1/2at²中s,t(t不等于0),v则a=() 解下列方程组 快解下列方程组 有好评 快 《赤壁赋》的翻译. 对朝花夕拾中一个人物的赏析要一个明确的人物,答的好我加分 第四秒时 是指时间还是时间间隔? 五秒初和四秒末指同一时刻?这句话对吗? 朝花夕拾赏析 第n秒内是指时刻还是时间间隔 求过程 好评 快求过程 好评 快 《朝花夕拾》的赏析 从0到第5秒末,时间间隔是6秒还是5秒 宁夏的同心县是一个干渴的地区,年平均蒸发量是是2325mm,比年平均降水量的8倍还多109mm,同心县的年平均降水量多少毫米? 已知等差数列{An}中,A1=1,An=A(n+1)+2 (n≥1),则A100为多少? 第5秒表示的时间间隔是 鸡兔共有40只,兔脚比鸡脚多16 只,鸡兔各多少只?{用方程解,一定采}快 这个电容上的数字表示的含义?54 47 6A这个电容上写了这三组数字都代表了什么 英语翻译Fox(狐狸) and Grapes(葡萄) A hungry fox came to a vineyard(葡萄园) where a lot of ripe grapes(熟透的葡萄) were hanging.They were on a trellis(葡萄架),but so high that he jumped(跳,jump的过去式) until(直到… 要用方程并求解 快一个两层书架,上层放的书比下层的3倍还多18本,如果把上层的书拿出101本放到下层,那么两层放的书本数相等,原来上、下层各有几本书?(用方程) 瓷片电容上写着: 怎样做环保标志版画我既想做个环保版画也想设计出属于我自己创造的环保宣传标志,有关于垃圾回收再利用的,我想弄个标志什么的,但是好像垃圾回收利用的那个标志在我们大家心里已经根 角速度在什么情况下可以看做矢量,什么时候看作标量?角速度为矢量,但在有的情况下可以看做标量,具体在什么情况下可以看做标量,什么时候看做失量呢? 瓷片电容上就一个数字应该怎样读? 五秒时是指五秒末吗?可以指五秒初吗? 朝花夕拾 十篇文章的内容朝花夕拾的每篇文章内容概括(每篇大约100字)(好的话追加悬赏分)急! 瓷片电容上写了个300是什么意思? 在五秒时是指5秒末还是5秒初 …………………… 朝花夕拾的赏析 五阴六阳是指哪“五阴”和哪“六阳”? 这个方程的解 在等差数列{an}中,a1+ a2+ .+a50=200,a51+a52+.+a100=2700则a1为在等差数列中,a1+ a2+ a3.+a50=200,a51+a52+.a100=2700,则a1为 渐强的符号怎么打?比如说弱是P的,就是这类型的怎么打?就是P那个类型的!越快越好! 越快越好,方程的题 等差数列an中,a1+a2+.+a50=200,a51+a52+...+a100=2700,则a1的值为? 英语翻译Figure 2-4 Example HTTP HeadersGET and POSTThe first relatively widely used version of HTTP was HTTP 0.9.This had supportfor only one HTTP method,or verb; that was cET.As part of its execution,a cETrequest can provide a limited amount of 角速度线速度是标量还是矢量? 在等差数列{an}中 a1+a2+.+a50=200 a51+a52+...+a100=2700 求a1 英语翻译really a clever trick in the struggle for shelf space这句话怎么翻译比较通顺 “顾颉刚”三字咋读啊? 已知{an}是等差数列,a1+a2+.+a50=200,a51+a52+.+a100=2700,则a1等于多少. 英语翻译支持取消的理由这些假日期间,人们己忘了五 一劳动节最初的意义,即工会与工人努力争取自己权利的宣传,而单纯高喊劳动者光荣的口号,更成为商家赚钱的机会,且加大交通,能源更方 阅读笔记和读书笔记有什么不同 病毒致癌因子是什么?是不是说:没有某种病毒可以直接导致癌症,而是由这中病毒引发的疾病最终导致癌症,所以这些能够间接引发癌症的病毒被称为病毒致癌因子? 英语翻译Daniel was alaways excuss for forgetting to do 顾颉刚 怎么读 病毒致癌因子有什么举例
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘