iOS

WWDC2016新技术盘点

Posted by 李清发 on January 9, 2017

目录[+]

Top

新的API

SFSpeechRecognizer框架

全新的SFSpeechRecognizer框架的到来彻底改变了在以前我们处理语音识别非常的繁琐甚至很多时候可能需要借助于第三方框架处理的情况

  • 可以实现连续的语音识别
  • 可以对语 音文件或者语音流进行识别
  • 最佳化自由格式的听写(可理解为多语言支持)和搜索式的字符串

示例:读取一段语音文件输出文字内容

#import <Speech/Speech.h>
//1.创建本地化标识符
NSLocale *local =[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
//2.创建一个语音识别对象
SFSpeechRecognizer *sf =[[SFSpeechRecognizer alloc] initWithLocale:local];
//3.将bundle 中的资源文件加载出来返回一个url
NSURL *url =[[NSBundle mainBundle] URLForResource:@"掌麦企业文化.mp3" withExtension:nil];
//4.将资源包中获取的url 传递给 request 对象
SFSpeechURLRecognitionRequest *res =[[SFSpeechURLRecognitionRequest alloc] initWithURL:url];
//5.发送一个请求
[sf recognitionTaskWithRequest:res resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {
        if (error!=nil) {
            NSLog(@"语音识别解析失败,%@",error);
        }else{
            //解析正确
            NSLog(@“语音内容:@",result.bestTranscription.formattedString);
    }
}];

SiriKit

在iOS10之后,苹果希望Siri能够给用户带来更多的功能体验,基于这个出发点,新增了SiriKit框架。Siri通过语言处理系统识别与用户的对话,解析并生成用于描述对话的意图(Intent),然后通过Siri框架把该Intent分发给相应的应用程序进而获取内容或执行操作。(图片来源苹果官方文档 SiriKit Programming Guide)

通过官方文档可以了解到SiriKit支持以下六类服务:

  • 语音和视频通话
  • 发送消息
  • 收款或者付款
  • 图片搜索
  • 管理锻炼
  • 行程预约

通知

新的通知框架新增了以下功能

  • 整合统一了本地通知和远程通知
  • 可以在通知中加入多媒体内容
  • 可以获取App中的应用清单,可以触发通知时间,能更新这些通知,删除旧通知
  • 可以通过代码获取用户的通知设置情况
UserNotifications.framework

(iOS10+, watchOS 3.0+,tvOS10.0+)

支持远程推送和本地通知的接收和发送,可以使用这个框架管理通知的发送基于地理位置和时间。同时应用程序扩展也可以使用该框架进行通知管理

UserNotificationsUI.framework

(iOS10+)

定义展现在用户设备上的通知效果,前提是使用该框架定义一个程序扩展来接收并发送通知。

Foundation框架

新增NSISO8601DateFormatter类 新增NSDateInterval类型

UITableView 和 UICollectionView 预加载

众所周知,TableView和CollectionView的顺滑与否能够很大程度上影响用户的使用体验。这次Apple对这两个View又进行了一次优化。 在UITableView中新增了UITableViewDataSourcePrefetching协议并提供了下列方法(Swift)

//此方法在TableViewCell进入屏幕前执行,完成网络请求或者复杂任务处理等耗时任务
func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {  
}
//在用户快速滑动,突然停下,反向滑动时停止预加载
func tableView(_ tableView: UITableView, cancelPrefetchingForRowsAt indexPaths: [IndexPath]) {
}

在UICollectionView中新增了UICollectionViewDataSourcePrefetching协议并提供了下列方法(Swift)

//此方法在CollectionViewItem进入屏幕前执行,完成网络请求或者复杂任务处理等耗时任务,
func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
}
//在用户快速滑动,突然停下,反向滑动时停止预加载
func collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath]) {
}

GCD在Swift3.0中的彻底改写

GCD(Grand Central Dispatch)是iOS开发中的重要概念,平时开发中大多数多线程都会用到它。此次在Swift3.0的更新中彻底改了GCD的语法,我们将不再会看到类似dispatch_async,dispatch_sync这样的写法了,而是引入DispatchQueue这个类。 例如:在全局线程中定义一个常量,在主线程中打印出来

DispatchQueue.global().async {
let test = "Swift3.0 GCD"
DispatchQueue.main.async {
   print(test)
   }
}

除了使用DispatchQueue之外也可以自定义DispatchWorkItem。DispatchWorkItem 定义了一个操作的内部代码,以及优先级,特性等等。 它可以直接在任何队列中执行:

let queue = DispatchQueue(label: "Swift.queue")
let workItem = DispatchWorkItem(qos: .userInitiated, flags: .assignCurrentContext) {
//执行操作  
}
queue.async(execute: workItem)

对dispatch_time_t也进行了改进,语法使用起来更加简单。DispatchTime.now() 是当前事前, 然后加上 .seconds(60) 代表 60秒。

let delay = DispatchTime.now() + .seconds(60)

UIViewPropertyAnimator

新的 UIViewPropertyAnimator 类可以更好地使用 UIView.animatedWithDuration API,借此可以实现很多功能,比如:

  • 中途中断动画,暂停,停止,恢复,逆转,控制进度
  • 动画开始后改变值
  • 改变 percentComplete 属性让动画更具交互性
  • 或者甚至可以把 percentComplete 和 UIGestureRecognizer 结合在一起使用

UITabBar

能够控制一个 tab bar item 的样式,比如背景颜色和文字属性。

Messages API

新的框架,用于创建基于 iMessage 的新应用 能够创建 iMessage 的表情包

Xcode 里的新工具

  • 新的可视化调试工具(Visual Debugging Tools),特别是内存和线程工具
  • 新的代码签名机制
  • Xcode 扩展
  • 在 Xcode 8 里允许你选择使用 Swift 2.3 还是 Swift 3.0
  • 图片名字自动补全,代码中可以对颜色和图片文字化
知识共享许可协议
文章四川掌麦科技有限公司创作,采用知识共享署名 4.0 国际许可协议进行许可。