iOS 新特性

iOS7的新特征:

关键字:用户界面的改变、多任务的增强、游戏、地图、AirDrop、应用程序间的音频、点对点的连接、一些新的Framework、已有Framework的增强、OC和弃用的一些API等。

用户界面的改变

在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中,应用程序的后台执行模型,新增了如下两种类型:

  1. fetch:如果应用程序需要从网络中有规律的下载新数据,那么现在可以通过向系统注册一下,使新数据的下载操作可以定期的被唤醒或者启动以在后台进行下载。注册方法为:在程序的Info.plist中,将UIBackgroundModes键值设置为fetch,然后在app delegate中,使用方法setMinimumBackgroundFetchInterval:来设置下载新数据操作之间的最小时间间隔。另外,必须在app delegate中实现application:performFetchWithCompletionHandler:方法以执行任意的下载。
  2. 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”。

 

游戏

在iOS7中,苹果加强了对游戏开发的支持。这主要体现在如下三个方面:

  • Sprite Kit Framework

Sprite Kit Framework (SpriteKit.framework)提供了一个优化了的硬件加速动画系统——用于创建2D和2.5D游戏。包括了游戏开发中许多重要的基本内容:图形渲染、动画系统、声音播放,并还有一个物理模拟引擎。通过Sprite Kit Framework可以让开发者把工作重点放在游戏内容的设计和交互上。

Sprite Kit Framework中,内容是以场景(scenes)的形式组织的。一个场景可以包括:纹理对象、视频、基于路径的形状、图片滤镜以及其它有些特殊的效果。Sprite Kit以最有效的方式来决定这些对象在屏幕上的渲染。当需要在场景中对某个对象进行动画时,可以使用Sprite Kit来明确的指定一个动作,或者使用物理模拟引擎给某个对象定义一个物理行为(例如重力、吸附和排斥)。

除了Sprite  Kit Framework,苹果还提供了Xcode工具来创建粒子发射效果和纹理集合。通过Xcode工具可以管理程序的assets,以及快速的更新Sprite Kit场景。

更多关于如何使用Sprite Kit,读者可以参考Sprite Kit Programming Guide。苹果也提供了一个示例演示如何使用Sprite Kit:Explained Adventure(From Apple)。

  • Game Controller Framework

Game Controller Framework (GameController.framework)可以让你在程序中发现并对游戏控制器硬件进行配置。通过Game Controller Framework可以让iOS设备通过无线或者蓝牙进行连接。当控制器可用的时候,该Framework会通知你的程序。

更多相关信息可以参考Game Controller Programming Guide。

  • Game Center 改进

在iOS7中,苹果对游戏中心(Game Center)做了如下改进:

  1. 给玩家提供一个与其它玩家互动的机会,即使目前还没有轮到该玩家。通过该功能,可以实现玩家之间的聊天、交易等(即使没有轮到玩家)。
  2. 每个程序的排行榜限制已经从原来的25变为100.通过GKLeaderboardSet对象,可以对你的排行榜进行组织,并把上限增加只500。
  3. 在游戏中进行挑战(做任务)的时候,可以为这个挑战添加条件限制。例如,在驾驶游戏中,指定必须使用相同的车辆。
  4. 为了防止作弊,增加了认证的支持,以及其它有些功能。

更多关于如何使用新的Game Center功能,请参考Game Center Programming Guide 。

关于Game Kit Framework,请参考Game Kit Framework。

地图

基于地图信息,苹果对Map Kit framework (MapKit.framework)做了大量的改进,并新增了不少功能。使用地图来显示的位置信息现在可以利用3D地图了,可以通过编程的方式来控制地图的视角。Map Kit还做了其它一些重要的改变:

  1. 图层(Overlay)可以被放置在地图中不同的层中,这样就可以将图层放置在相关数据的上面或者下面。
  2. 可以使用MKMapCamera对象在地图中增加一个位置、倾斜和航向信息。摄像头信息可以给地图增加3D视图体验。
  3. 通过MKDirection类可以从苹果那里请求获得方向相关的线路信息。通过获得的线路信息可以创建一个图层并显示到地图中。
  4. MKGeodesicPolyline类可以参照地球的曲率,创建一个基于线条的图层。
  5. 使用MKMapSnapshotter类可以捕捉基于地图的图片。
  6. 目前可视化的图层是基于MKOverlayRenderer的,这取代了之前的图层视图,并提供了一个简单的渲染方法。
  7. 可以使用MKTileOverlay和MKTileOverlayRenderer类来取代地图上已有的大头针(tile)。

更多相关信息,请阅读Map Kit Framework Reference 。

AirDrop

通过AirDrop,用户可以给附近的iOS设备分享图片、文档、URL以及其它有些数据。AirDrop支持内置到已有的UIActivityViewController中——这个类会根据分享的不同数据显示出不同的选项。数据的话,可以通过实现UIActivityItemSource接口后进行发送。大概苹果也不愿意看到超出他们控制的文件分享功能吧,毕竟这和iOS设计的初衷不一样。如果你不使用UIActivityViewController的话,可能是无法在应用里实装AirDrop功能了。苹果建议:如果你的程序中还没有使用这个类,请考虑将其添加到程序中。

更多关于利用activity view controller来访分享数据的信息,请参考UIActivityViewController Class Reference。

程序间的音频(inter-App Audio)

Audio Unit framework (AudioUnit.framework)现在支持程序间的音频了——可以在同一台设备上不同的两个程序之间发送MIDI命令和音频流。例如,通过该功能,你可以使用一个程序来录制音乐,然后将录制的音乐音乐发送到另外一个能对音乐进行处理的程序中。

为了公开(vend)你程序中的音频数据,需要发布一个AURemoteIO实例来充当音频组件——对其它进程是可见的。在iOS7里面,要在另外一个程序中使用程序间的音频功能,请使用音频组件发现接口。

更多相关内容请看:Audio Toolbox Framework Reference

点对点的连接

通过Multipeer Connectivity framework (MultipeerConnectivity.framework)可以查找附近的设备,并直接与这些设备进行通讯——不需要通过互联网。该Framework具有这样的特点:很容易的创建多点(multipeer)会话、支持稳定、可靠和实时的数据传输。可以看出,通过该Framework,你的程序可以与附近的设备进行通讯,并做到数据的无缝交换。

该Framework提供了两种方式来查找并管理网络服务:编程方式和基于UI选项。可以使用MCNearbyServiceBrowser类以编程的方式查找并管理设备。另外,我们可以将MCPeerPickerViewController集成到程序中——用来显示用户可以选择的设备列表。

更多相关信息,请阅读:Multipeer Connectivity Framework Reference

新增的Framework

在iOS7中,新增了如下一些Framework:

  1. Game Controller framework(GameController.framework):提供了与游戏相关的硬件通讯接口。
  2. Sprite Kit framework(SpriteKit.framework):提供了基于精灵(sprite-based)的动画和图形渲染。
  3. Multipeer Connectivity framework(MultipeerConnectivity.framework):提供设备间点对点通讯的功能。
  4. JavaScript Core framework (JavaScriptCore.framework):提供了用Objective-C封装的大量标准JavaScript对象。通过该framework可以对JavaScript代码进行评估(evaluate),以及解析JSON。
  5. Media Accessibility framework (MediaAccessibility.framework):管理媒体文件中字幕(closed-caption)内容的显示。通过该Framework与settings的结合,可以让用户开启字幕的显示。
  6. Safari Services framework (SafariServices.framework):通过该framework,可以通过编程的方式将URL添加到用户的Safari阅读列表中。

你可能感兴趣的:(iOS,ios,新特性)