引言
今天(北京时间2013年06月11日)凌晨,由库克引领的苹果发布了iOS7,本次新系统的发布可以说是iOS自发布以来最大的一次变革,iOS的设计由之前的拟物变为了现在的扁平化——这也标志着苹果真正的进入了库克时代。
目前苹果只发布了iOS7的beta版本,虽然据闻有不少bug,不过无论你对iOS7的设计是吐槽也好,惊艳也罢,基调已经定下来了,苹果的这次革新,是否能够获得用户的青睐,就让用户来检验吧。
按照往年的惯例,iOS7的release版本预计会在今年9月份发布,在这差不多3个月的时间里面,苹果的主要任务估计就是完善并加强iOS7的稳定性了。
为了观察开发者对WWDC2013的关注情况,在WWDC开幕的时候,笔者分别在新浪微博和Twitter上检索WWDC关键字,发现相关新讯息更新的速度非常快,从这一个角度来说,无论是国内的开发者,还是国外的开发者,对苹果非常的期待。
虽说iOS和相关设备的每次升级更新,都会引来大批的code monkey吐槽(譬如去年iPhone5的发布),不过吐槽归吐槽,想想社会是进步的,没有大胆的尝试,又哪来进步呢——无论成功与否,苹果这种引领业界创新的精神才应该是值得大家欣赏与效仿的!
好吧,上面说了一大堆内容,貌似与本文主题“iOS新特征”偏离太远,下面我们就来看看iOS7里面的一些新特征:
正文
无论是对于开发者或用户来说iOS7都是非常重要的一次更新,iOS7对UI进行了彻底的重新设计。另外为了创建2D和2.5D游戏,iOS7引进了一套全新的动画系统。在iOS7中,多任务的增强、点对点的连接,以及其它一些重要的特征都足以使iOS7意义非凡。
下面我们就来细数一下iOS7的新特征:
关键字:用户界面的改变、多任务的增强、游戏、地图、AirDrop、应用程序间的音频、点对点的连接、一些新的Framework、已有Framework的增强、OC和弃用的一些API等。
关于本文:新特征介绍1 首先介绍一下iOS7中用户界面的改变和多任务的增强。
用户界面的改变
在iOS7整个系统中,每一方面的设计都重点突出功能以及用户的内容——半透明和精致的视觉感受——流畅和逼真的动作——具有清晰、深入和有活力的用户体验。对于开发者来说,无论是创建一个全新的App,或者对已有的程序进行升级更新,在设计的时候,都需要时刻记住这些特点。
在用户界面设计中,新增了一个重要的概念:UIKit动力(UIKit Dynamics)。通过UIKit动力,在我们的程序中可以为UIView对象指定动力行为,以及让别的对象遵循UIDynamicItem协议——(遵循该协议的对象称为动力项[dynamic items])。动力行为通过将现实世界中的行为和特征与程序相结合(例如将重力加入程序的动画中),以提供一种增强用户体验的方法。UIKit默认支持如下5种动力行为:
吸附行为(UIAttachmentBehavior):有一个对象UIAttachmentBehavior,该对象用来指定两个动力项(项或点)之间的连接,当一个项或者点移动时,吸附的项也随之移动。当然,这个连接并不是完全是静态的(static),吸附的项有两个属性damping(阻尼)和oscillation(震荡),这两个属性决定了吸附项的行为是如何随时间而变化的。
碰撞行为(UICollisionBehavior):通过对象UICollisionBehavior指定一个边界,并且让各个动力项,在该边界内参与碰撞。UICollisionBehavior对象还可以指定这些动力项适当的回应碰撞。
重力行为(UIGravityBehavior):通过对象UIGravityBehavior给动力项指定一个重力矢量,具有重力矢量的动力项,会在重力矢量的方向上一直加速,直到与别的动力项产生了冲突或者,遇到了边界。
推动行为(UIPushBehavior):通过对象UIPushBehavior给动力项指定一个持续的或者瞬时的力(force vector)。
捕捉行为(UISnapBehavior):通过对象UISnapBehavior给动力项指定一个捕捉点。动力项会根据配置的效果,来抓住这一捕捉点。
当动力行为被添加到animator(UIDynamicAnimator类的实例对象)时,动力行为就被激活。animator为动力行为的执行提供了上下文。动力项可以有多个行为,只不过所有这些行为都必须添加到相同的animator中。
更多关于动力行为的使用,请参考UIKit Framework Reference。
另外还有Text Kit是一个功能齐全、更高级别的Framework——通过该Framework,可以对程序中的文本内容进行精致的排版。Text Kit能够将文本内容按照段落、列和页进行布局。可以很容易的让文本围绕着某个区域进行布局(例如图形),并且可以管理多种字体。值得一提的是,在iOS7中,已经将TextKit整合到所有基于文本的控件中,这样一来,在程序中,对文本的创建、编辑、修改和显示都非常的容易——不像在之前iOS中,需要更多的代码来实现。
关于动力行为和Text Kit,随后,笔者会给出一些示例,敬请关注!
下面我们来看看iOS7中对多任务都做了哪些增强。
多任务的增强
iOS7中,应用程序的后台执行模型,新增了如下两种类型:
- fetch:如果应用程序需要从网络中有规律的下载新数据,那么现在可以通过向系统注册一下,使新数据的下载操作可以定期的被唤醒或者启动以在后台进行下载。注册方法为:在程序的Info.plist中,将UIBackgroundModes键值设置为fetch,然后在app delegate中,使用方法setMinimumBackgroundFetchInterval:来设置下载新数据操作之间的最小时间间隔。另外,必须在app delegate中实现application:performFetchWithCompletionHandler:方法以执行任意的下载。
- remote-notifaction:在iOS7之前,程序中使用的推送通知是用来给用户推送新的消息,而有新的消息到达时,如果需要获得消息相关更多内容时,还需要用户启动相应的程序,以在程序中获取新的消息内容,而现在在iOS7中,通过推送通知,可以启动一个后台下载操作任务。要使用这种模型,只需要将程序Info.plist文件中的UIBackgroundModes键值设置为remote-notification,然后在app delegate中实现application:didReceiveRemoteNotification:fetchCompletionHandler: 方法。
无论是fetch或remote-notification后台执行模型,在适当的时机,都有可能被启动或者从休眠(suspended)状态转移到后台状态。就拿fetch后台模型来说,系统会根据当前可用的信息来来决定启动或者唤醒程序的最佳时机。例如,当网络条件不错,或者设备已经被唤醒的时候,会启动或唤醒程序以执行程序的fetch后台操作。再来看看remote-notification后台执行模型——当有一条新的推送通知到达设备时(在通知用户之前),程序可以先去下载新的消息内容,当内容都准备好之后,就可以通知用户了——可见,对于remote-notification后台执行模型,可以让用户把注意力都集中在内容上,这也符合本文开头提到的iOS7设计重心。
在程序中,处理后台下载数据时,应用使用NSURLSession类。这个类对已有的NSURLConnection类进行了改进——针对初始化和处理NSURLRequest对象,提供了一个简单的、基于任务的接口。单个NSURLSession对象可以初始化多个下载和上传任务,并且通过它的delegate,可以处理来此服务器的任意身份认证请求。
关于多任务的更多内容,在随后的博文中,笔者会进行详细的介绍,读者也可以查阅iOS App Programming Guide中的“App States and Multitasking”。
提醒:本文的内容主要参考苹果官网提供的一份文档:What’s New in iOS 7(From My GitHub,FromApple),如果你英文好的话,建议你去阅读原文。
文章转自破船之家