首页 > 代码库 > iOS 版本更新摘要(三)iOS 8.x

iOS 版本更新摘要(三)iOS 8.x

 

 

 

[What‘s New in iOS 8.x](https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html#//apple_ref/doc/uid/TP40014205-SW1 "What‘s New in iOS 8.x")

  

####iOS 8.0

#App Extensions

 

    iOS 8.0 提供了 app 扩展点,让你可以在系统的选择区域扩展选择区域。这是通过代码实现的,在用户当前任务的上下文中,可以做一些自定义的功能。例如:你可以提供一个扩展点让用户发送内容到你的社交网站上。当用户安装和启用这个扩展点之后,他们在选择分享的时候,你的分享扩展点提供的功能就可以接受、验证并发布用户的内容了。当用户选择分享时,系统的分享菜单负责实例化并展示你的扩展。

 

    在 Xcode 中,你可以通过创建一个预配置的扩展点 target 到你 app 中。当用户安装了你的 app 后,也就安装了你的扩展点。然后用户可以在系统的 Setting App 中启用这个扩展点。当用户使用其他 app 的时候,系统可以确保这些被启动的扩展点会有合适的系统 UI 界面去展示,例如分享菜单。

 

    已知的拓展点有以下几个:(iOS 8.0 有6个,现在则更多)

    1. Share:分享内容到社交网站或者其他地方;

    2. Action:对选中的内容执行一个简单的任务;

    3. Today:在通知中心的 Today 页面,提供一个快速更新操作或者一个简报任务;

    4. Photo editing:在 Photos App 里面处理图片或者视频;

    5. Storage provider:提供一个文件本地存储空间,这个可以被其它 apps 所访问。这里面的文件被访问,也可以添加文件进来;

    6. Custom keyboard:用户在系统-键盘里面选择全局键盘时,可以选自定义的。

 

    每一种扩展点,针对各自的用途都定义了相关的 APIs。当你用某一个扩展点的模板时,你会获得一个默认的 target,以及该扩展点相关的一些预置方法和参数列表。

 

#Touch ID Authentication

 

    现在你可以使用 Touch ID 来验证用户了。有一些 app 可能需要安全验证才能开放全部功能;而另外一些可能是需要通过验证来获取一些信息或者其它内容。在某些情况下,你可以要求用户先认证再使用 app。

    1. 你可以用 touch ID 来解锁 keychain 中的个人项目;

    2. 使用 LocalAuthentication.framework 可以让你在需要用到认证的时候,弹出一个 alert。当你的 app 收到这个操作的反馈时,可以根据结果来处理一些事务。

 

#Photos

 

    新的 photos App 让你可以获取到更好的照片。它通过提供新的编辑能力,新的创建方式和更高效的工作流来获取用户的照片和视频资源。

 

###Photos Framework

 

    Photos.framework 提供了新的 APIs,用来处理照片和视频资源(包括 iCloud 中被 photos App 管理的照片)。这个更强的 framework 是用来替代  Assets Library framework的。关键特性包括了一个线程安全的图片及缩略图获取框架、资源修改请求功能、监听其它 app 修改动作以及可还原修改内容的功能。

 

    PhotosUI.framework 可以用来创建编辑照片和视频的扩展点。

    

###Manual Camera Controls

    

    AVFoundation.framework 让拍好照片变得比过去更简单了。你的 app 可以直接控制对焦、白平衡和曝光设置。除此以外,你的 app 还可以在不通的曝光设置在使用连拍。

 

###Improved Camera Functionality

 

    在iPhone 6 & 6 PLUS 中,用以下的新 APIs 去发现和使用新的特性:

    1. videoHDRSupported 属性,让你设置是否支持高动态范围(HDR)流

    2. AVCaptureVideoStabilizationModeCinematic 一个新的视频稳定模式,可以给出更加电影化的视频效果

    3. highResolutionStillImageOutputEnabled 属性,设置它可以让 AVCaptureStillImageOutput 对象可以捕获高清的静止页面

    4. autoFocusSystem 属性,可以用来设置系统自动曝光的样式

 

#Games

 

    iOS 8的技术进步让你有史无前例的游戏画面及音频体验提升。你可以使用容易开发的上层 framework 精心开发,也可以使用底层的 API 来 发挥 GPU 的力量。

 

###Metal

 

    Metal 给了非常低开销的方式来操作 A7 和 A8 的 GPU,而且给复杂的图形渲染以及几何计算授权了极其高性能支持。Metal 取消了很多操作的瓶颈,例如老的图形处理 APIs 中的代价很高的状态确认。Metal 的设计初衷就是为了从开发者性能敏感的渲染代码中移除开销很高的状态转变和汇编操作的边界限制。Metal 提供了预编译着色器和状态对象,以及明确的指挥调度来保证你的 app 的 GPU 图形绘制和计算的高性能高效率。这个设计理念一直延伸到构建 App 的工具里面。当你用 Xcode 打包 app 的时候,Xcode 会将 Metal 的着色器编译进一个默认的 library 里面,缩减了 run time 为准备着色器所花的时间。

 

    图形绘制、计算和位块传输命令都是为了无缝的高效的合作而设计。Metal 的设计使用了现在流行的架构,如多任务和共享内存,使得它可以并行运行 CPU 创建的指令。

 

    使用 Metal,你就有一组精简的 API、一个统一标准的图形绘制和着色计算的语言和 Xcode 的工具组,你不需要学习太多 frameworks 、语言和工具,也在你的 app game 里面能释放 GPU 的全部能力。

 

###SceneKit

 

    SceneKit 是为了构建简单游戏和丰富 UI 交互(通过 3D 图形)并且包含了高性能渲染引擎和描述性的上层 API 的一个基于 OC 的库。SceneKit 早在 OS X v10.8 就可以使用了,iOS 则到当前版本才可以。许多底层 API(例如Open GL ES)需要用户去实现一些用来描述具体场景的渲染协议。相对而言,SceneKit 可以让你用图形、材料、光线以及摄像头这些场景内的物体来描述一个场景,之后通过动画来进行相互转换。

 

    SceneKit 的 3D 图形引擎通过模拟重力、作用力、刚体碰撞以及运动副使你的 app 或者游戏(页面)更加栩栩如生。新增的上层 API 使的我们可以更加简单的在场景中使用轮式载具(如汽车);也可以添加一个有角度的物理或磁场区域,或者一个对物体有扰动效果力场。

 

    你可以使用 OpenGL ES 的着色器对场景内的内容进行着色,或者提供一个 GLSL 的着色器来替代或增强 SceneKit 的着色器。你还可以给 SceneKit 添加基于着色器的后置处理技术,例如色彩分级和环境光屏蔽。

 

###SpriteKit

    

    SpriteKit.framework 添加了许多新的特性使得它可以更容易的支持高级的游戏特效。这些新的特性包括了对自定义 OpenGL ES 着色器和光线的支持、SceneKit 的集成以及新的高级的物理特效和动画效果。例如,你可以使用这个类 SKFieldNode 来创建一个物理区域,这个区域可以模拟重力、阻力和电磁力的力场效应。你也可以轻易的创建出逐像素贴图的、可碰撞物理物体。而且现在可以比以往更容易的给父类加一个物理物体,即使父类自己没有物理物体。这些新的特性使得复杂的物理模拟变的容易实现。

 

    你可以用约束来修改场景中的特效和动画。例如,你可以让一个节点一直指向另一个,不管他们怎么动。

 

    Xcode 6 纳入了新的着色器和场景编辑器,来缩短你创建游戏的时间。当你创建好一个场景时,里面的节点(包括属性)、里面的力场,都会被序列化成一个文件,这样可以方便你的 app 加载。

 

###AV Audio Engine

 

    AVFoundation.framework 提供了一个独立的音频功能,这比 Core Audio 的上层 API 还要抽象。这些新的音频特性在 OS X 和 iOS 中都可以使用。包括:自动调用音频的 IO 硬件、音频的录制与重播、音频文件的解析与转换。现在你还有权设置音频单元的音效、波形、节奏、重播速度、立体声、3D音效以及外接 MIDI 设备。

 

###OpenGL ES

 

    iOS 8 添加了以下的新扩展:

    1. APPLE_clip_distance 用来支持硬件的裁剪面操作(OpenGL ES 2.0 和 3.0)

    2. APPLE_texture_packed_float 用来支持浮点型的纹理格式(R11F_G11F_B10F 和 RGB9_E5)

    3. APPLE_color_buffer_packed_float 是基于 APPLE_texture_packed_float,所以新的纹理格式可以被帧缓冲对象使用。这就意味着一个 app 可以用这种方式将自己变成一个帧缓冲器。

 

#HealthKit Framework

 

    HealthKit.framework 是一个新的 framework,用来监控一个用户的健康状态。现在有很多设备与APP都可以跟踪用户的健康状态,但是都很难图形化的显示出来。使用了这个 framework 可以将用户手动输入与 app & 设备采集的信息进行汇总。这些信息集中存放在一个安全的地方,可以通过自带的 Heath App 直接查看。

 

    当你的 app 实现了对 HealthKit 的支持后,它可以直接提供用户的健康信息和基本信息,而不需要实现特定健身跟踪设备的协议。用户则可以决定自己分享哪些健康信息给你的 app。你要用户分享信息给你,你就可以注册到它的通知队列里面,只要信息有变化都会通知你;你的 app 则可以精细的处理这些信息。例如:你的 app 可以注册接受用户的血压通知,或者注册一个仅接受血压过高的通知。

 

#HomeKit Framework

 

    HomeKit.framework 是一个新的 framework ,用来连接和控制你家里的设备。新的设备都提供了更好的连接方式和更好的用户体验。HomeKit 提供了设备的标准化连接方式。

 

    你的 app 可以通过 HomeKit 连接家里的设备,你可以发现并配置它们。你可以编辑一些操作(单个或组合的),而且还可以通过 Siri 去触发。还有,你的设备配置好后,你可以分享这些命令,比如临时给一个客人。使用 HomeKit Accessory Simulator 可以测试你的 app 与设备的通讯。

 

#iCloud

 

    iCloud 的这次更新会影响到一些已有 app 的交互以及其用户。

 

###Document-Related Data Migration

 

    iCloud 的基础框架,在设备与服务器之间文件和数据进行互传交互时,健壮性与可靠性进一步提升。当用户安装了 iOS 8 的系统,登录(iCloud)进去之后,iCloud会一次性迁移数据到新的设备。这次迁移是将数据与文件copy到一个新版本的容器中,新的容器适用于 iOS 8+ 和 OS X 10.10+。而使用老版本的设备,会继续运行在老的容器中,数据变更不与新容器的同步。

 

###CloudKit

 

    CloudKit.framework 是为了让 app 和 iCloud 传输数据的工具。与别的iCloud操作技术不一样,这个库让你可以在传输时,管理所有类型的数据。使用 CloudKit 的 App 可以将数据放到一个共享的仓库里面,这个共享的仓库可以和 App 绑定,即使这个设备没有登录 iCloud 账户。做为开发人员,你可以通过 iCloud 的面板,清晰的看到这个仓库里面数据的变动。

 

###Document Picker

 

    UIDocumentPickerViewController 这个类给了在 App 沙盒以外操作文件的功能。它可以作为一个简单的文件分享的工具,也可以作为一个复杂的工作流工具,因为它让你可以在多个 App 中操作同一个文件。

 

    Document picker 让你可以获取到多个文件容器的文件。不仅可以使用 iCloud 容器提供的文件,还可以使用实现了 Storage Provider extension 的容器内的文件。

 

#Handoff

 

    Handoff 是 OS X 和 iOS 上,用来提升用户体验中操作连贯性的,一个重要特性。Handoff 让用户可以跨设备执行同一个操作。比如,你在 Mac 的 Safari 上看一篇很长的文章,当你转到另外一个 iOS 设备上的 Safari 时,这篇文章的浏览进度是和 Mac 同步的。Handoff 可以让交互体验做到无缝连接。

    

    如果你的 App 想使用这个功能,你只需要实现一个很小的 API 就好了。这样的话,每一个用户正在做的事情都会放在一个对象里面,这个对象内有恢复此次操作的关键数据。当用户选择继续这次操作时,这个对象就会传到需要恢复操作的设备上。为此,有一些代理会在恰当的时期去执行并更新操作状态,例如用户操作数据的对象刚传到设备上的时候。

 

    如果进行一个操作需要的数据比基础数据多,新拉起的 app 有机会和原来的 app 建立一个数据传输流。文件操作类的 app 默认支持该功能,前提是操作的是 iCloud 共享的文件。

 

#Supporting New Screen Sizes and Scales

    

    这段我没有按原文直译过来。(关键是我size class用的不是很好,误导了阅读的人就不好了,23333)

    与 iOS 8 一起问世的是两个有划时代意义的手机型号:iPhone 6 和 iPhone 6 Plus。不过我要吐槽两点:

    1. Apple 打了自己的脸,6 系列手机无法单手操作了。(其实 iPhone 6 及后续机型轻轻双触 Home 键,就可以单手操作了,试试看吧)

    2. iPhone 6 Plus 是所有 iPhone 里面运行内存性价比最低的手机,大尺寸小内存,容易内存耗尽,闪退率最高的机型。(而大多数开发者都不处理内存警告的通知)

    

    简单说一下这个适配的更新吧。

    1. iOS 8 开始可以使用 Metal 给 6 Plus 更好的体验,这个估计国内没几个人做过。

    2. Size Class,可以适配所有的尺寸,老板再也不用担心你开发的慢了。

    3. iOS 8 开始可以使用 storyboard 作为启动页面了,事实上你新建项目的时候就会自动生成一个。

    

###Traits Describe the Size Class and Scale of an Interface

 

    iOS 8 加入了 Size Class 作为 UI 搭建的一个特性。这个特性把 页面分成两种:常规型(regular)和紧凑型(compact)。常规的用来代表一个大的屏幕尺寸,例如 iPad、或者一些大的视图:iPhone 的滚动视图。每种设备都被定义了一种 Size Class,包括横竖屏状态。原文有几张示意图,我就不贴了。

 

    一个页面可以关联多种 Size Class。这个可以很好的处理下面这种情况:一个小的页面需要在一个大页面下展示,你可以选一个Size Class来放大图,用另一个你喜欢的来放小图。当然为了适配 Size Class,API有所变动:

    1. UITraitCollection 这个类是用来描述一个对象的特征的集合。表征一个对象的 Size Class、缩放比例和特有平台的描述(为了合理翻译 idiom 这个单词,我看了好多 Apple 的文档,最后觉得这是 Apple 用于说明不同平台语言特性的,暗指 iOS 不同运行平台的特有 API)。UIScreen、UIViewController 和 UIView 都是支持 UITraitEnvironment 的代理的,所以他们都有特征的集合。你可以检索某个对象的特征,并可以在他变化时做一些操作。

    2. UIImageAsset 这个类可以按照图片的特性对他们进行编组管理。把带有同一特征的相似的图片合并到一个资源下,然后自动检索并使这个资源正确拥有对应特征集合的图片。为此 UIImage 也做了一些修改。

    3. 支持 UIAppearance 协议的类,可以基于自己特征集合定义一个对象的外观。

    4. UIViewController 新增了查询子页面特征集合的能力。你可以用这个方法 viewWillTransitionToSize:withTransitionCoordinator: 去改变布局出来的页面的 Size Class。

    

    Xcode 6 开始支持统一的故事版。在故事版上,你可以任意操作基于每个 Size Class 的 ViewConrtoller 上面的 views。你可以使用同一个故事版构建不同的 Size Class 来做两个相似的页面。首先,建立一个通用的故事版,然后自定义每一个 Size Class 里面的样式内容。你使用 Xcode 6 来检测 app 在各个 Size Class 下的兼容情况。

 

###Supporting New Screen Scales

 

    从6 Plus 开始,高清晰度的R屏投入了使用。为了用好这块屏幕,6 Plus 是用了 414 x 736 的Size 和 1242 x 2208 pixels的分辨率(对应3.0的Scale)。不过在显示的时候,UIKit会把它渲染为1080P的。为了适应这个尺寸,ArtWork中需要加入 @3x 的图片,6 Plus在加载的时候会优先加载 @3x 的素材。

 

    在图形app中使用 Metal 或者 OpenGL ES,可以更加容易的绘制精确图形,而不需要其他大量的取样。这一点对于需要高密度计算的 3D app 来说很关键。还有,建立渲染的缓冲区也可以很好的解决这类问题。

 

    UIScreen 提供了一个新的属性 nativeScale,这个属性用来表示 native 页面的 Scale 值。当这个值和 Screen 的 scale 属性一样的时候,可以按照 Screen 同样的渲染像素尺寸进行渲染。如果不一样的时候,你可以在显示之前给出取样范围。

 

    如果你正在写一个 OpenGL ES 的 app,GLKView 会自动为你创建一个基于页面 Size 和 contentScaleFactor 属性值的缓冲区对象。当这个View被加入到window上时,需要把这个值赋值给window.screen.nativeScale。

    * Listing 1:

    > - (void) didMoveToWindow {

    >     self.contentScaleFactor = self.window.screen.nativeScale;

    > }

 

    如果你写的是基于 Metal 的,也有和上面的类似的操作。另外,每当页面 size 改变时,在这之前,你要让 Metal 的 layer 给你一个新的可用区域,计算然后赋值给 drawableSize 属性。

    * Listing 2:

 

    > CGSize drawableSize = self.bounds.size;

    > drawableSize.width  *= self.contentScaleFactor;

    > drawableSize.height *= self.contentScaleFactor;

    > metalLayer.drawableSize = drawableSize;

 

    你可以参考 [MetalBasic3D](https://developer.apple.com/library/content/samplecode/MetalBasic3D/Introduction/Intro.html#//apple_ref/doc/uid/TP40014603). 另外,Xcode也提供了相应的模版,演示了这类操作。

    

#Additional Framework Changes

 

    为了适应 iOS 8的变化,API做了以下改变。

 

###API Modernization

 

    这个版本开始许多 frameworks 都有了很大的变化,他们都使用了 现代 Objective C 语法:

    1. getter 和 setter 方法被属性代替。当然现存的 getter 和 setter 还有效。

    2. 初始化的方法使用 instanceType 代替过去的 id。(这一点提升其实很大,对于代码安全来说,很好)

    3. 指定初始化被声明在所有适合的地方。

 

    多数情况下,你不需要改变你的代码。但是如果你适配了现代 Objective C 的代码,你将在 Swift 交互时获得有更好的体验。[Adopting Modern Objective-C](https://developer.apple.com/library/content/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html#//apple_ref/doc/uid/TP40014150 "Adopting Modern Objective-C")

 

###AV Foundation Framework

 

    AVFoundation.framework 允许你在拍摄的时候获取元数据。任意类型的元数据都可以嵌入的视频记录各个时间点中。也就是说,你可以移动拍摄的设备中写入物理坐标。(所以照片信息里面是可以查到拍摄时的地理位置的,各位妹子当心哦)

 

###AVKit Framework

 

    AVKit.framework 以前只在 OS X 中提供,现在在 iOS 上用来替换 MediaPlayer.framework 作为视屏播放器。

 

###CoreAudioKit Framework

 

    新的 CoreAudioKit.framework 简化了使用 inter-app 视频时界面搭建的操作。

 

###Core Image Framework

 

    CoreImage.framework 做了以下的改变:

    1. 你可以在 iOS 中创建自定义图像内核。

    2. Core Image 的探测器可以识别图片中的矩形和二维码。

 

###Core Location Framework

 

    CoreLocation.framework 做了以下的修改:

    1. 你可以定位到 iPhone 在一个高楼的哪个楼层里。

    2. 访问服务给了需要位置信息(这些信息是用户关心的)的 app 一种新的重要位置变化服务。

 

###Core Motion Framework

 

    CoreMotion.framework 提供了两个新的 class(CMAltimeter and CMAltitudeData)用来连接 6 和 6 Plus 的气压计。在这个两个设备上,你还可以用 CMMotionActivity 实例来判断用户是不是在自行车上。

 

###Foundation Framework

 

    Foundation.framework 这个版本做了以下的增强:

    1. NSFileVersion 这个类可以让你访问 iCloud 文件的历史版本。这些历史版本存在 iCloud 里,你可以请求下载。

    2. NSURL 支持存储缩略图(它可以被当成元数据)。

    3. NSMetadataQuery 这个类可以搜索你在 app 中打开过的其他 iCloud 文件。

 

###Game Controller Framework

 

    GameController.framework 做了以下的修改:

    1. 如果你连接了设备,你可以在 GameController.framework 里直接获取设备的运动信息。

    2. 如果你必须要知道是否按住了 button 而不需要知道按压强度,仅当你的 button 状态变化时,会有一个新的句柄供处理。

 

###GameKit Framework

 

    GameKit.framework 改了这些东西:

    1. 那些 iOS 7 加入的特性现在被加入了 OS X 10.10,跨平台运行的游戏可以更加容易的用这些特性。

    2. 新的 GKSavedGame 类以及 GKLocalPlayer 里面新的方法让开发者更容易保存用户的进度。这些数据存在 iCloud 中,GameKit 会在必要的时候同步两端的数据。

    3. 用于标记用户的方法和属性被废弃了。使用 GKPlayer 对象去标记用户,新的方法和属性已经被加了进去。

 

###iAd Framework

 

    iAd.framework 加了一些新的东西:

    1. 如果你用了 AVKit 播放视频,你可以在开始播放前加滚动广告。

    2. 你可以获取更多你的 app 中广告有效性的信息。

 

###Media Player Framework

 

    MediaPlayer.framework 很多类给出更多的元数据。

 

###Network Extension Framework

 

    NetworkExtension.framework 可以控制和配置 VPN。

 

###SpriteKit Framework Changes

 

    SpriteKit.framework 新增了很多新的特新:

    1. SKShapeNode 实例可以让你给模型指定一种纹理,描边的或者填充的都行。

    2. SKSpriteNode、 SKShapeNode、 SKEmitterNode、和 SKEffectNode 这些了类现在都支持自定义渲染。使用 SKShader 和 SKUniform 可以编译基于 OpenGL ES 2.0 的片段着色器,并可以输入数据给着色器。

    3. SKSpriteNode 可以提供光照信息,因此 SpriteKit 自动合成了光影效果。

    4. SKFieldNode 可以让你在场景中使用物理特效。例如:磁场、拖动效果、甚至合成随机动效。对于场景内的动效,你可以细细的对力度和作用力的距离降落比进行调优。区域内的节点,让你更容易的加入力场。

    5. 全新的 SK3DNode 可以将 SceneKit 场景当成精灵集成到到你的 app 中。每次 SceneKit 渲染页面时,它会优先渲染 3D 节点,生成纹理,然后把纹理加在精灵上。创建 3D 精灵可以让你免去建立很多帧动画来实现效果。

    6. 新增了许多动作,包括逆运动学的。

    7. 场景处理中新增了一套约束系统。SceneKit 在物理模拟后提供了一些约束,你可以用他们来设置节点的位置和方向。例如,你可以用约束让一个节点一直朝向另一个。约束是你更加容易的实现渲染,而不需要手动调整。

    8. 场景可以实现 runloop 所有阶段的代理,不需要作为 SKScene 的子类。

    9. SKView 提供了更多的调试信息,你也可以给出更多的渲染新能的提示。

    10. 你可以为光影和力场效果创建的表层纹理(内嵌的着色器也行)。使用 SKMutableTexture 可以创建动态更新内容的纹理。

    11. 你可以在运行时从纹理集合中生成地图集。

 

    Xcode 6 还包含了很多新的 SpriteKit 的编辑器。你可以直接创建和编辑场景内的东西,包括场景内节点的本体和其他它们的属性。场景会直接序列化成一个可以直接加在的文件。这些编辑器会节省你的时间,因为一般人不会去用自定义的编辑器创建资源。

 

###UIKit Framework

    

    UIKit.framework 有了以下的增强:

    1. app 远端或本地推送都需要通过 UIUserNotificationSettings 对象,告知用户明确的提示类型。这个注册过程从原来的远程通知(APNs)中分离了出来,并且需要用户授权才能开启对应的提示。

    2. APNs 和 本地推送都可以增加自定义的操作。你可以在操作触发时进行对应的处理。本地通知还可以被地理位置触发。

    3. Collection Views 支持动态布局。比如文本的在多场景的自适应。此外,它还支持独立的个性配置,用来提升性能。

    4. UISearchController 替换了 UISearchDisplayController ,用来管理搜索相关的页面。

    5. UIViewController 支持 SizeClass。

    6. UISplitViewController 支持 iOS 设备了(以前是 iPad 独享的)。这个类为可用的页面调整了他的弹出层。并且他还改动了显示和隐藏主页面的方式,让你更容易的去操控它的子页面。

    7. UINavigationController 现在有新的方式去改变bar的高度和显示与否。

    8. 新的 UIVisualEffect 这个可以做毛玻璃效果了。

    9. 新的 UIPresentationController 让你可以让你将一个页面的内容按显示的他们的纹路(chrome:铬)分开。

    10. 新的 UIPopoverPresentationController 用来处理弹出窗的内容。现存的 UIPopoverController 用来在 screen 上弹出的控制器。

    11. 新的 UIAlertController 替换了 UIActionSheet 和 UIAlertView,你可以为你的 app 选择对应的提示方式。

    12. 新的 UIPrinterPickerController 提供了一个类似 viewController 的页面,展示画笔的选择列表。画笔实例基于新的 UIPrinter 类创建。

    13. 你可以通过 openURL 打开 UIApplicationOpenSettingsURLString 直接到 app 的设置页面。

 

###Video Toolbox Framework

 

    VideoToolbox.framework 可以直接硬编码解码了。

 

###Webkit Framework

 

    一个崭新的框架,一堆类被加了进来。它可以轻松的制作高性能的使用 web 内容的 app。

 

#Deprecated APIs

    以下的API被废弃了:

    1. 注册通知功能。

    2. UIViewController 与 Size Class 相同作用的一些属性。你需要完整的看一下上文的 [Traits Describe the Size Class and Scale of an Interface](https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html#//apple_ref/doc/uid/TP40014205-SW30 "Traits Describe the Size Class and Scale of an Interface")这个版块。

    3. UISearchController 替换了 UISearchDisplayController。

    4. GameKit 中用来表示用户信息的字段和方法。

 

####iOS 8.1

#Apple Pay

 

    这个版本就加了一个 Apple Pay。 PassKit framework 里面添加了相关的接口(包括支付方式和支付请求)。

  

####iOS 8.2

#Apple Watch

  

    iOS 8.2 开始你可以用 Apple Watch 和你 手机里的 app 交互。当然 Xcode 也支持 WatchKit app 的开发。这些 app 可以快速简洁的获取一些有用的信息,而你不需要打开手机 app。

    你可以通过两种方式强化你的 app 界面,而提供用户实效性、高价值的信息:

    1. 预览界面直接给了你全屏的有用的信息。就像他字面意思一样,你可以无须交互的直接预览信息。事实上,你点一下它,就会直接打开 iwatch 上的 app。

    2. 在用户同意通知后,你可以自定义通知的界面。你还可以使用自定义的 action ,在用户自愿操作时,触发对应的动作。

 

    当然 Xcode 和 iOS SDK 也同步升级了。

    正如你所想象的 Watchkit app 的设计与 iOS app 有很大的不同。你需要好好看看 [Apple Watch Human Interface Guidelines](https://developer.apple.com/watchos/human-interface-guidelines/overview/ "Apple Watch Human Interface Guidelines")。

 

#WatchKit Framework

 

    WatchKit.framework 是一个全新的软件包,用来支持 Apple Watch app 的开发。使用它你可以创作、配置和操作 WatchKit app、Glance 以及自定义通知界面。

    1. 界面控制器让你可以时间层状或书页状的导航。

    2. 界面对象如:文本框、图片、按钮和列表可以提供展示和交互。

 

####iOS 8.3

 

#Apple Pay

    

    增加了一个新的类 PKPaymentButton,这个可以用来初始化 Apple Pay。这些 buttons 会带有 Apple Pay 的 logo。

    Apple Pay支持了很多新的方式如:“shipping,” “delivery,” “pickup from store,” and “pickup from customer.”你还可以在获取别人地址的情况下,获得别人的名字。

    Apple Pay 请看 [Apple Pay Programming Guide](https://developer.apple.com/library/content/ApplePay_Guide/index.html#//apple_ref/doc/uid/TP40014764 "Apple Pay Programming Guide");PKPaymentButton 相关的请看[PassKit Framework Reference](https://developer.apple.com/documentation/passkit "PassKit Framework Reference")

  

#Metal

 

    使用 Metal 的 app 可以有更多的方式操作缓冲区以及内省顶点属性类型:

    1. MTLComputeCommandEncoder 和 MTLRenderCommandEncoder 对象包含了新的方法,用来直接copy值给着色器缓冲表以及改变初始化偏移来使用已经绑定的缓冲区。使用这些属性去获取很小的一次性的数据缓冲区或者重新配置可获得的缓冲区,而不需要再创建一个 MTLBuffer 实例。

    2. MTLVertexAttribute  对象新增了 attributeType 属性,可以内省 Metal 源码中生命的着色器的属性类型。

    

####iOS 8.4

 

    Nothing.

 

iOS 版本更新摘要(三)iOS 8.x