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

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


CES2013 AMD发布移动处理器路线图和环绕计算概念 对话Linus Torvalds:大多黑客甚至连指针都未理解 PaaS玩家们,怎么演好自己的角色? Apple高管表态:低端机绝不是iPhone的未来 Web开发人员应该知道的IE 10兼容性问题 一周消息树:CES2013揭幕 科技巨头纷纷发力 2012专利排行榜 IBM位列第一、Google增长最快! 微软赞黑客并称Windows RT越狱非安全漏洞所致 周报第46期:GitHub历史上最糟糕宕机事故回放及反省 著名计算机黑客Aaron Swartz自杀身亡 移动周报:移动互联网行业技术趋势前瞻 旁门左道:让移动游戏下载量暴涨的邪门功夫 可植入身体:“可穿戴计算”时代来临 Web服务器份额:Apache仍居首,Nginx将超IIS 防税务欺诈:挪威财政部将开源收银机代码 响应式设计实战:3人+1.5个月 IE10优化版cnBeta诞生记 不听乔布斯劝告:“不专心”的Google照样干得好 躲过一劫!苹果不锁杂志类APP介绍截图 Oracle发布软件更新修复Java漏洞 设计师将吞噬工程师吗? 开源产品系列:小巧灵活的Web框架web.py Windows Server 2012 VHDX格式揭秘 Rovio将赶超Zynga 成为全球最受欢迎游戏公司 Netflix基于AWS的大数据平台Hadoop架构解析 微软开始提供Windows Embedded测试版系统 Aaron Swartz自杀原因存疑 引发互联网连锁反应 重金吸引开发者 BlackBerry10应用36小时增1.5万 把数据中心搬入“空间站” Dell和Intel对OpenStack新兴公司Mirantis投资 快讯:马云自5月10日起不再担任CEO职务 Web工程师必备的43款可视化工具 求救,硬盘故障!!! 从一个TQuery中的数据如何快速的存放到另一个表中? 创建临时表空间时出错了 VC6的命令行工具 unix下 oralce 8.0.5 连接unix 下8.1.6的问题 帮助中的一段话 关于delphi中类之间成员的访问问题 请教一条sql语句 IE 不能正常浏览applet? SQL语句的简单问题 求救!树形菜单,请高手赐教 求救!!谁有写过安全策略方案,给个模板呀? winrunner怎么获取工具条中的按钮对象? 这个update为什么报错?该如何改? 招兼职图片程序员 请大家帮帮忙,简单(送分) 如何在web.config中设置验证登陆??????? 非常奇怪的编译问题 .NET的平台怎么搭建! 退格键的ASCii码值是多少?急。。。。。。。。。。。 请教大家个问题 如何用php下载文件? 求能够交替显示不同颜色的行的表格控件,十万火急! 如何将SQL SERVER 2000中的两个表连接在一起,且其中的记录是一对多? 如何用JavaScript控制验证控件的Enable属性?? 拼音模糊查询 “网上邻居”就打不开了,这是怎么回事?如何处理? 为什么没有delete 掉 使用pro c要用到那些包,如何快速学会pro c? 谢谢 拼音模糊查询 求gif或jpg下图标。详情见内。 昨天,公司通知我晉升,老丈人讓我去見她,第一次,雙喜臨門,散分!!! 看看我们昨天晚上怎么过的中秋吧 拼音模糊查询 XP下断开连接了,怎么总是不断自动拨号啊。 螺旋藻能防辐射,你知道么,给说说吧,有分送 servlet如何实现对文件的删除? 请教PWM DsgnIntf的问题 请问如何让自己的服务可以早点启动(普通服务,不是驱动服务)? 程序员的女人 请教一道网设的题目 请大家介绍几个热门的英文讨论的技术网站给我。 请教一个抽象类的问题 如何在dataset.tabel中将两个表能过双方的两个字段建议关系 高分求高手:jsp中如何获得服务器的网卡地址? 新手,请教C#入门 如何将列表框中所有的值都显示出来,不要有滚动条! 系统软件谁居第一 新人“ gxlxwp1982(我爱Delphi,就像老鼠爱大米)”来了,以后大家多帮忙!!!!1 使用Access数据库的SQL语句问题请教!!!! “出此下策”中的“下策”在文中具体指什么 出此下策算是一个词语吗? 寝室晚上通宵断水断电的意义是什么?校方为什么要出此下策?它给我们带来了什么?又抑制了什么?越详细越全面越好! 问一道高二数学二面角题正三棱柱ABC-A1B1C1的底面边长a,侧棱长根号2*a1 建立适当的坐标系,写出A B A1 C1坐标(坐标系我要看下.不会).2 求AC1 与侧面ABB1A1所成角 严格下策反复消去法的名词解释 七情八纵的主人公是谁 核舟记 断句~急鲁直左手执卷末,右手指卷,如有所语.请把这句话断句:(用“/”断句.不用加标点符号)鲁 直 左 手 执 卷 末 右 手 指 卷 如 有 所 语不要发垃圾 一律滚~ 《核舟记》的断句谁有的, 二面角的题在底面是直角梯形的四棱锥S-ABCD.角ABC=90度,SA垂直面ABCD,SA=AB=BC=1 AD=1/2 求:面SCD与面SBA所成角的二面角的正切值 高低压开关柜铭牌上的额定电流是不是按柜内元器件的最小的额定电流填写?例如,一台环网柜HXGN17-12 断路器的额定电流是630A 电流互感器是 LZZBJ6-12 50/5 0.5/0.2s 熔断器是 为AKG-12/50A 请问铭牌 求:上下策!求:上下策这两本书!最好是上策的!别糊弄我!OK? 全国43站点监测雾霾对健康影响 含河中央将遴选100名具冲击诺贝尔奖潜力日本民主党:安倍内阁任命亲信 有统治中国常驻联合国副代表敦促美尽快终止对93岁老人做裸模十余年:几个孩子都不浙江衢州:法官强忍病痛开庭感动当事人辨称窃听不针对欧洲公民 美试图为盟友外交部副部长刘振民与朝鲜外务省副相举中国财政部官员当选亚洲开发银行副行长印度一客车行驶途中起火 44人死亡包中国青少年多发\"老年病\"令人忧 网络身份证到底是什么?国台办:愿意为台商参与“一带一路”建俄海军第二艘大型登陆舰即将开始铺设龙台股10日收盘上涨106.63点外媒:中国有望成为巴西石油最主要出口洪秀柱呛台湾民主变民粹:成了与13亿湖北麻城市人大常委会原主任陈远亮被移俄方:中俄8月将在日本海军演 或含两青岛全麦白啤上市 古法酿制为舌尖酿造俄方:中俄将在日本海演练空降兵和海军美国都柏林拟重划学区 华人小区强烈抗无限炼金术师尘中仙无尽的可能性绝代天医快穿之炮灰千金的逆袭蛇瞰神座文学大宗师无限恐怖之机械师穿越之带着空间养夫郎归来的穿越者乱说聊斋三国历史文化馆旅游大寨旅游九间殿旅游小金瓦寺旅游菩提塔旅游八宝如意塔旅游西望洋山旅游三元宫旅游仙岳山旅游慧如公园旅游陈慈黉故居旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘