以下内容转载自 http://www.cocoachina.com/special/ios7/
在用户界面设计中,新增了一个重要的概念:UIKit动力(UIKit Dynamics)。通过UIKit动力,在我们的程序中可以为UIView对象指定动力行为,以及让别的对象遵循UIDynamicItem协议——(遵循该协议的对象称为动力项[dynamic items])。动力行为通过将现实世界中的行为和特征与程序相结合(例如将重力加入程序的动画中),以提供一种增强用户体验的方法。UIKit默认支持如下5种动力行为:
1.吸附行为(UIAttachmentBehavior):有一个对象UIAttachmentBehavior,该对象用来指定两个动力项(项或点)之间的连接,当一个项或者点移动时,吸附的项也随之移动。当然,这个连接并不是完全是静态的(static),吸附的项有两个属性damping(阻尼)和oscillation(震荡),这两个属性决定了吸附项的行为是如何随时间而变化的
2.碰撞行为(UICollisionBehavior):通过对象UICollisionBehavior指定一个边界,并且让各个动力项,在该边界内参与碰撞。UICollisionBehavior对象还可以指定这些动力项适当的回应碰撞。
3.重力行为(UIGravityBehavior):通过对象UIGravityBehavior给动力项指定一个重力矢量,具有重力矢量的动力项,会在重力矢量的方向上一直加速,直到与别的动力项产生了冲突或者,遇到了边界。
4.推动行为(UIPushBehavior):通过对象UIPushBehavior给动力项指定一个持续的或者瞬时的力(force vector)。
5.捕捉行为(UISnapBehavior):通过对象UISnapBehavior给动力项指定一个捕捉点。动力项会根据配置的效果,来抓住这一捕捉点
当动力行为被添加到animator(UIDynamicAnimator类的实例对象)时,动力行为就被激活。animator为动力行为的执行提供了上下文。动力项可以有多个行为,只不过所有这些行为都必须添加到相同的animator中。
Text Kit
是一个功能齐全、更高级别的Framework——通过该Framework,可以对程序中的文本内容进行精致的排版。Text Kit能够将文本内容按照段落、列和页进行布局。可以很容易的让文本围绕着某个区域进行布局(例如图形),并且可以管理多种字体。值得一提的是,在iOS7中,已经将TextKit整合到所有基于文本的控件中,这样一来,在程序中,对文本的创建、编辑、修改和显示都非常的容易
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,可以处理来此服务器的任意身份认证请求
游戏方面
Sprite Kit Framework,除了Sprite Kit Framework,苹果还提供了Xcode工具来创建粒子发射效果和纹理集合。通过Xcode工具可以管理程序的assets,以及快速的更新Sprite Kit场景。
Game Controller Framework
Game Controller Framework (GameController.framework)可以让你在程序中发现并对游戏控制器硬件进行配置。通过Game Controller Framework可以让iOS设备通过无线或者蓝牙进行连接。当控制器可用的时候,该Framework会通知你的程序。
地图的改进
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中——这个类会根据分享的不同数据显示出不同的选项。苹果建议:如果你的程序中还没有使用这个类,请考虑将其添加到程序中。更多关于利用activity view controller来访分享数据的信息,请参考UIActivityViewController Class Reference
程序间的音频(inter-App Audio)
Store Kit Framework
Store Kit framework(StoreKit.framework)已经迁移到新的订单系统(receipt system),这样一来,开发者可以在自己的设备上验证内购(in-app purchase)。同样也可以在服务器上进行程序购买订单的验证。更多关于新订单系统的使用,请阅读:Receipt Validation Programming Guide。
Security Framework
Security Framework(Security.framework)现在支持:通过iCloud,可以把密码在用户两台设备间进行同步。通过新的keychain属性((kSecAttrSyncronizable),程序可以为iCloud标记它们的keychain item。更多相关这个属性的内容,请看该framework的头文件。关于keychain更多信息,请看Keychain Services
Pass Kit Framework
Pass Kit Framework(PassKit.ramework)新增了一些API——针对同时添加多个通行证(pass),通行证文件的格式也做了相应的调整:
1.新的key指定通行证的截止日期 2.可以指定通行证只与特定的蓝牙信号相关 3.利用新的属性来控制通行证的显示。可以把通行证进行归类,并在通行证的背面显示自定义的文字内容,以及控制显示在通行证上的时间值 4.可以给通行证附带一些额外的数据信息,在程序中可以使用这些数据,不过并直接显示给用户 5.可以指定那些data detector用于通行证的字段中 更多关于如何在程序中使用Pass Kit的信息,请阅读Passbook Programming Guide。关于通行证文件的格式,请阅读Passbook Package Format Reference。
在MessageUI framework中,MFMessageComposeViewController现在可以支持将附件添加到信息中。关于新接口内容,可以参看framework头文件。关于这个framework的类,请阅读Message UI Framework Reference
Media Player Framework
在Media Player framework中,MPVolumeView类可以判断用户选择的无线路由(wireless route,例如AirPlay和Bluetooth)是否可用。你也可以判断无线路由当前是否可用。关于新接口信息,请参看framework的头文件。关于Media Player framework涉及到的类,请参看Media Player Framework Reference。
Image I/O Framework
Image I/O Framework(ImageIO.framework)现在提供了获取和设置image metadata的接口。
更多相关接口信息,请看framework的头文件。关于framework类的介绍,请看Image I/O Reference Collection
iAd Framework
iAd framework(iAd.framework)做了如下修改——让广告更好的融入到程序中:
在MPMoviePlayerController类中的新方法可以让你在播放电影之前运行广告
framework对UIViewController进行了扩展,让其更容易创建广告内容。现在,你可以对view controller进行适当的配置——在实际内容显示之前先显示出广告内容。
关于新接口请看framework中的头文件。关于framework的介绍,请看Ad Support Framework Reference。
Foundation Framework
Foundation framework(Foundation.framework)主要做了如下改进:
1.NSURLSession类是一个新增的类,主要用于程序在后台运行时,对网络资源的操作。这个类替换了NSURLConnection和相关delegate;同样也替换了NSURLDownload和相关delegate。2.NSURLComponents类也是一个新增类——用来解析URL的构建。这个类在解析URL的时候支持URI标准(rfc3986/STD66)。3.NSNetService和NSNetServiceBrowser用于在蓝牙和Wi-Fi中点对点的查找。4.NSURLCredential和NSURLCredentialStorage两个类可以用来创建同步策略的证书,并可以从iCloud中移除相关同步策略证书。5.NSURLCache、NSURLCredentialStorage和NSHTTPCookieStorage三个类支持存储请求的异步处理。6.NSCalendar类支持新的日历类型。更多关于新的接口,请看framework中 大头文件和Foundation release notes。关于该framework类的介绍,请看Foundation Framework Reference。
Core Telephony Framework
Core Telephony framework(CoreTelephony.framework)现在可以获取到设备使用的无线电信息:当前的信号强度、cell ID。由运营商开发的相关程序,同样可以通过预定运营商相关服务,来对他们的程序进行验证。更多相关信息请看Core Telephony Framework Reference。
Core Motion Framework
Core Motion framework(CoreMotion.framework)现在支持step counting(类似计步器)和运动的跟踪。关于step counting——framework通过检测用户的运动,然后根据运动信息计算出步数(貌似很牛叉的样子,不知道准确度如何了)。由于运动信息是由系统检测的,所以即使当程序没有运行的时候,系统也可以持续的收集step数据。通过这样的功能,framework也能区分出不同的运动类型,例如walking、running或者automobile——这对于导航类程序来说,就可以使用这些数据,直接修改用户的运动类型。更多相关信息,请看Core Motion Framework Reference。
Core Location Framework
Core Location framework(CoreLocation.framework)可以通过蓝牙设备来测距。通过测距可以确定附近蓝牙设备的范围,并作出相应的反应。例如,在博物馆的画廊里面,可能有一些蓝牙信号,供参观者通过相关程序显示出画廊的入口和出口。framework还支持推迟位置的更新的通知,直到特定的时间或者用户移动距离超过了最小值。更多相关信息,请看Core Location Framework Reference。
Core Foundation Framework
Core Foundation framework(CoreFoundation.framework)现在支持在派送队列(dispatch queues)中进行流对象的调度。更多相关信息,请看Core Foundation Framework Reference。
Core Bluetooth Framework
Core Bluetooth framework(CoreBluetooth.framework)做了如下改进:
1.该framework现在可以把CBCentral和CBPeripheral对象的状态信息进行保存,并且在程序启动的时候还原——这个功能可以支持相关蓝牙设备的长期行为。2.CBCentral和CBPeripheral类现在使用NSUUID对象来存储唯一标示。3.现在可以从CBCentralManager中同步的获取一个CBPeripheral对象。更多相关信息,请看Core Bluetooth Framework Reference。
AV Foundation Framework
AV Foundation framework(AVFoundation.framework)做了如下改进:
1.AVAudioSession支持一些新的行为:可以选择音频输入的首选项,包括来自内置麦克风的音频;支持多通道的输入和输出 2.AVVideoCompositing和相关的类支持自定义视频合成器(video compositor) 3.AVSpeechSynthesizer和相关的类提供了语音合成功能 4.capture类新增支持的功能有:查找camaera支持的格式、支持60fps录制、在录制和预览的时候,Video的放大(真实和数字化)、实时查找机器可读的条形码数据、自动对焦范围的限制、采集录制过程中访问时钟。另外还有很多信息,笔者就不在这里一一列出,读者可以查阅AV Foundation Framework Reference。
Accelerate Framework
Accelerate framework(Accelerate.framework)做了如下改进:
1.支持Core Graphics数据类型的操作 2.支持灰度图片:每个像素为1、2或4位 3.可以在不同图像格式之间进行转换 4.支持biguad(IIR)操作 更多相关信息请看Accelerate Framework Reference。