iOS7更新了很多引人注目的功能。用户界面完全重新设计了。iOS7为开发2D,2.5D游戏引入了全新的动画系统。加强多线程,点对点连接,以及许多其他重要的功能让iOS7成为有史以来最有意义的一次发布。
这边文章总结了iOS7开发相关的特性。这个版本大操作系统可以再目前的iOS设备上运行。另外,关于关键的新技术,这篇文章也列出了详细介绍这些特性的文章。
用户界面的改变
iOS7包含了很多新特性来帮助大家创建友好的用户界面
UI设计
iOS7用户界面完全重新设计了。纵观整个系统,不仅注重了功能,也注重了用户内容的设计。半透明,精致的视觉触动,流动,逼真的运动感应,层次感,和灵活的用户体验。不管你是创建一个新的APP或者更新现有的,设计的时候记住这些特性。
用iOS7SDK编译的APP在iOS7上运行时都会自动展现新的界面。如果在界面中使用了自动适应尺寸和位置,这些界面也会自动布局。不过也许仍然会有增加的工作需要做来让界面按照预期的展现。同样的,如果自定义了界面,也需要更新来更好的适应新的界面。
关于和使用iOS7的优势来设计APP,查看介绍iOS7 Design Resources.
界面的动态行为
App现在可以为UIView对象以及那些实现了UIDynamicItem协议的对象指定动态行为。(实现了这个协议的对象被叫做dynamic items.)动态行为提供了一个优化APP用户体验的方式,就好像真是世界的行为和特性(比如重力)一样的动画。UIKit支持下面的动态行为:
- UIAttachmentBehavior对象指定了两个动态对象之间的联系或者一个对象和一个点之间。当一个对象(或点)移动时,相关的对象也会移动。这个连接不完全是静态的。这个行为也有阻尼震荡属性来决定时间相关的行为。
- UICollisionBehavior对象可以让两个动态对象按照他们指定的边界实现碰撞行为。这个属性也可以让对象对碰撞做出相应的反应。
- UIGravityBehavior为动态对象指定一个重力矢量。动态对象会向重力矢量方向加速直到他们其他对象碰撞或者到边界。
- UIPushBehavior对象为一个动态对象指定一个持续这瞬间的推力
- UISnapBehavior为一个对象设置一个捕捉的点。对象被一个设置好的力拉向指定的点。就好像被用一个弹簧拴在那个点上。
动态行为在被加到一个animator对象时就生效了,animator对象是UIDynamicAnimator类的实例。animator为动态行为提供了上下文。一个动态对象可以有多个动态行为,但是这所有的动态行为必须在同一个animator对象中做动画。
想了解更多可以实现的东西的话,查看UIKit Framework Reference.
Text Kit
Text Kit是一个管理字符串和排版的工具集合。Text Kit可以在段落,列,以及页上排版有样式的字符串。它可以容易的在文字周围添加图片。也可以使用多种字体。Text kit也可以和UIKit文字相关的控件交互,这样可以让APP更容易的创建,编辑,显示,存储字符串。并且使用更少的代码。
Text Kit包含了基于已有的类的新的类以及一些扩展,包括:
- NSAttributedString类支持一些新的属性
- NSLayoutManager类生成字形以及布局文字
- NSTextContainer类定义一个文字布局的区域
- NSTextStorage类定义了一个基本的界面来管理文字内容
更新关于Text Kit的内容,参考Text Programming Guide for iOS.
支持64位
APP可以被编译为64位的了。所有的系统库和框架都已经是64位的了,这意味着他们既可以运行32位APP也可以运行64位APP。当APP被编译位64位时,由于在64位模式下有额外的处理器资源,APP可以运行的更快。
iOS使用LP64模式,和OS X以及64位UNIX系统一样,这意味着移植代码更方便。更多关于iOS64位运行时和如何写64位APP,查看64-Bit Transition Guide for Cocoa Touch.
多线程加强
iOS7支持两种新的后台运行模式:
经常连接服务器来更新内容的APP,可以通过向系统注册来周期性的在后台获取内容。要注册的话,在APP的Info.plist文件中包含UIBackgroundModes,值设为fetch。然后,当APP启动后,调用setMinimumBackgroundFetchInterval:方法来设置接收更新消息的频率。最后,必须要在APP delegate中实现application:performFetchWithCompletionHandler:方法。
通过推送来通知用户有新消息的APP可以在后台获取消息。要支持这个模式的话,在APP Info.plist文件中包含UIBackgroundModes,值设为remote-norification。同样需要在APP delegate中实现application:didReceiveRemoteNotification:fetchCompletionHandler;方法。
支持fetch或者remote-notification后来模式的APP可能会在一个模式的时机被启动或者从暂停模式移动到后台模式。在fetch后台模式,系统会根据当前信息来决定最好的启动或唤醒APP的时机。例如,在网络状态很好或者设备已经启动。你也可以悄悄的推送消息,也就是不显示弹出框的推送,这样就不会打扰用户。
对于少量内容的更新,使用NSURLRequest。要在后台上传或下载大量内容的话,使用NSURLSession。这个类加强了NSURLConnection,它提供一个简单的,基于任务接口来初始化和执行NSURLRequest。一个NSURLSession对象可以初始化多个上传下载任务,并且可以使用回调来处理服务器的身份认证请求。
更多关于新的后来运行的资料,参考iOS App Programming Guide 中的 App States and Multitasking
游戏
iOS7加强了游戏支持
Sprite Kit Framework
Sprite Kit Framework提供了一个硬件加速的动画系统来优化2D,2.5D游戏。Sprite Kit提供了游戏需要的大多数基数设施,包括图形渲染动画系统,声音回放,物理模拟引擎。Sprite Kit把你从这些事情中解放出来,你可以专注于设计游戏的内容和更上层的交互。
Sprite Kit APP中的内容被放到了场景中。一个场景可以包含文字对象,声音,形状,图片滤镜以及其他的效果。Sprite Kit获取这些对象然后以最效率的方式显示在屏幕上。当需要对场景中的内容做动画时,可以使用Sprite Kit来指定想实现的操作,或者可以使用模拟物理引擎来定义物理行为(比如重力,吸引或排斥)。
除了Sprite Kit,还可以使用Xcode工具创建粒子效果和纹理效果。可以使用Xcode工具来管理APP资源和快速更新Sprite Kit场景。
更多关于如何使用Sprite Kit,查看Sprite Kit Programming Guide.要查看如何使用Sprite Kit来创建APP,查看code:Explained Adventure.
Game Controller Framework
Game Controller Framework 可以发现和配置基于iPhone/iPod/iPad的游戏控制器设备。游戏控制器可以直接物理连接到iOS设备上,也可以通过蓝牙无线连接。Game Controller Framework在有控制器可用时通知APP,也可以让你选择那个控制器是和APP相关的。
更多关于支持游戏控制器的信息,查看Game Controller Programming Guide.
Game Center 加强
游戏中心包含以下加强:
回合制的游戏可以支持一个新特性叫做exchanges.Exchanges可以让玩家执行操作,就算不是在他的回合。可以使用这个功能实时的轮回,玩家聊天,和其他玩家交易。
单个APP的排行榜限制从25个增加到100个.也可以使用GKLeaderboardSet对象来管理排行榜,这样可以增加到500。
可以定义挑战的前提条件。比如,赛车比赛可以定义一个时间的挑战,前提是玩家必须使用同样的车。
加强了认证机制,也添加了其他特性来方式欺骗。
更多关于如果使用游戏中心的属性,查看Game Center Programming Guide.更多关于Game Kit framework的信息,查看Game Kit Framework Reference.
地图
Map Kit Framework加入了很多优化和基于地图信息的新功能。使用地图显示地理位置信息的APP现在可以使用地图APP中的3D地图。包括用程序控制如何显示。Map Kit也在下面这些方面做了加强:
Overlays在地图中可以被放在不同的层中,这样他们根据数据不同看起来有前有后。
可以在地图上实现一个MKMapCamera对象,这样可以添加位置,各种角度的,和导航信息。指定的相机对象在地图上展现一个3D的效果。
MKDirections类可以从Apple请求导航路线相关的信息。可以使用那些信息创建overlay显示在自己的地图上。
MKGeodesicPolyline类可以创建一个根据地球曲率的线overlay。
App可以使用MKMapSnapshotter类开捕捉基于地理位置的图片。
基于MKOverlayRenderer类的overlay视觉展示,替换了以前的overlay界面,它提供一个更简单的渲染实现。
APP现在可以扩展或者替换map上已有的图块,通过使用MKTileOverlay和MKTileOverlayRenderer类
更多关于Map Kit的信息,查看Map Kit Framework Reference.
AirDrop
AirDrop可以让用户和附近的设备分享照片,文件,url以及其他各种数据。AirDrop封装在UIActivityViewController类中。这个类为展示你指定的不同内容,显示不同的选项。如果现在还没有使用这个类的话,可以考虑在界面上加入这个选项。
要接收通过AirDrop发送的文件,需要做下面的事情:
在Xcode中,声明APP支持的文件类型。(在Info.plist中)系统通过这个信息来决定APP是否能打开指定的文件。
在APP回调中实现application:openURL:sourceApplication:annotation:方法。(有新文件收到时,系统会调用这个方法)。
发送到APP的文件被放在APP的home文件夹下的Documents/Inbox中。如果打算修改文件,需要在修改之前把文件移到其他地方。(系统只允许APP读和删除这个文件夹下的文件)存储在这个文件夹下的文件会使用数据保护加密,所以你必须要处理设备锁上时数据不能访问的问题。
更多关于使用activity view controller分享数据的信息,查看UIActivityViewController Class Reference.
Inter-App Audio
Audio Unit Framework增加了支持跨应用音频,它可以让同一个设备上的APP之间发送MIDI命令和声音流。例如,可以用这个特性来让一个APP录来自另外一个乐器APP发出的声音,或者把声音发送给另外的APP来处理。要发送app的声音数据,公用的I/O(AURemoteIO)对其他进程是可见的。要使用其他APP的声音,使用iOS7的发现音频组建接口。
更多关于新接口的信息,查看头文件,和Audio Unit Framework Reference。
点对点连接
Multipeer Connectivity framework 支持发现附近的设备并且不需要网络直接和这些设备通讯。这个框架可以容易的创建多点会话,实现可靠顺序数据传输和实时数据传输。
这个框架提供了代码级别和界面级别的选择来发现和管理网络服务。APP可以在用户界面中整合MCBrowserViewController类来列出设备让用户选择。同样,也可以使用MCNearbyServiceBrowser类来通过代码搜索和管理设备。
更多信息,查看Multipeer Connectivity Framework Reference.
新的框架
iOS7包含下面一些新框架
游戏框架(GameController.framework)提供了和游戏相关硬件交互的接口.查看Game
Controller Framework
精灵框架(SpriteKit.framwork)提供了基于精灵的动画和图形渲染.查看Sprite Kit
Framework
多点连接框架(MultipeerConnectivity.framework)为APP提供了点对点网络连接.查看Peer-to-Peer
Connectivity.
JavaScript核心框架(JavaScriptCore.framework)提供了Objective-c封装的标准JavaScript对象的类。
使用这个框架可以执行JavaScript代码和解析JSON数据。更多信息,查看框架的头文件。
多媒体框架(MediaAccessibility.framework)可以管理多媒体文件是否显示字幕。这个框架使用一些新的设置来让用户实现隐藏字幕。
Safari服务框架(SafariServices.framwork)支持使用代码添加阅读列表到Safari.更多信息,查看框架的头文件。
以及增强了一些现有的框架