热门iOS 10 Objective-C和Swift 3.0代码示例

自2008年iOS推出以来,已有超过200万个应用下载了1300亿次。 iOS平台的普及并不是什么秘密,每次新的迭代都带有巨大的期望。 借助iOS 10,Apple为iPhone和iPad开发人员提供了对该软件的更多控制权,引入了允许创建新类别的应用程序和功能的新框架和工具。 为iOS 10开发的应用程序还扩展了系统服务,以提供更多引人入胜的功能。 iOS 10中有许多新功能,但是在本文中,我们将为发现最有趣和有用的示例提供示例。

UIViewPropertyAnimator

iOS 10引入了一种编写动画代码的新方法:使用UIViewPropertyAnimator。 这不是现有API的替代,也不是客观上“更好”,但它确实为开发团队提供了以前无法实现的控制水平。

从本质上讲,UIViewPropertyAnimator增强了在我们的应用程序中创建动画的选项。 新选项包括停止动画和恢复动画(以及其他时间参数),随时结束动画,反转动画或将其移动到任何选定的时刻等等。

另一个新颖的事实是,除了以前使用的动画定时选项(例如EaseInEaseOut)之外,我们现在还能够基于三次函数的检查点定义自己的时间函数。 在iOS 10之前,在iOS上执行基于手势的可中断动画是一项麻烦的任务,通常需要第三方框架。
仅动画时间的精细控制就可以使Property Animator改进我们现有的UIView动画。 但是,它们真正闪耀的地方是当您创建的动画不只是一劳永逸时-我们希望用户能够抓取动画对象并与之互动。

在Objective-C和Swift 3.0中查看UIViewPropertyAnimator的代码示例。

呼叫工具

iOS 10 CallKit是一个全新框架,在WWDC 2016上首次引入。CallKit使您的Internet协议语音(VoIP)应用程序与本机Phone UI紧密集成,从而极大地增强了用户体验。

VoIP并发症

在CallKit之前,VoIP呼叫只是一个通知。 用户无法区分传入的文本消息通知和传入的电话通知之间的差异。 自然,这导致大量未接电话。 在锁定的屏幕上,即使用户设法通过滑动通知来接听电话,他/她也需要输入密码,并被重定向到应用程序,然后才可以开始讲话。 在未锁定的屏幕上,体验同样差劲,因为来电通知只是屏幕顶部的横幅。 更进一步,发出呼叫要求用户启动VoIP应用程序并从那里启动它。

iOS 10 CallKit的改进

CallKit解决了所有这些复杂问题。 借助iOS 10 CallKit,第三方VoIP应用程序可能成为用户拨打和接听电话的主要方式。 来电具有丰富的本机UI,带有接听和拒绝按钮以及用户的自定义铃声。 可以通过本地电话应用程序的联系人,收藏夹和最新消息(通过Siri,通过蓝牙或CarPlay)完成通话。

iOS 10 CallKit允许VoIP呼叫与电话呼叫,FaceTime呼叫甚至其他VoIP呼叫相互作用。 系统知道所有呼叫后,便以相同的优先级处理它们。 这意味着当接到电话时,VoIP呼叫不再处于保留状态。 此外,用户可以使用“请勿打扰”功能,可以阻止联系人或静音呼叫,甚至可以在进行中的呼叫和保持的呼叫之间进行交换,无论其类型如何。 **注意:此示例需要在设备上构建**

在Objective-C和Swift 3.0中查看CallKit的代码示例。

SiriKit

SiriKit是一个新框架,允许开发人员将其应用程序的内容和服务与Siri集成在一起,因此用户可以仅凭自己的声音进行操作。

SiriKit支持六种不同类型的应用程序(外加三种条件应用程序),涵盖了各种常见和流行的App Store产品。 支持的域及其可执行的任务是:

  • VoIP呼叫:发起视频和音频呼叫,并使用VoIP应用搜索用户的呼叫历史记录
  • 消息传递:使用支持消息传递服务的应用程序发送文本消息并搜索用户收到的消息
  • 付款:与其他人之间进行付款和请求付款,使用支持个人付款的应用程序付款和搜索帐单
  • 照片:搜索特定内容类型的照片和视频,并在照片库应用中播放幻灯片
  • 锻炼:在锻炼应用中开始,暂停,继续,结束和取消锻炼
  • 乘车预订:通过提供类似出租车的服务的应用程序预订乘车,接收已预订乘车的状态并获取可用乘车列表。
  • 汽车命令(仅限汽车供​​应商):激活汽车信号,获取并设置汽车锁的​​状态,获取汽车中的当前燃油或功率水平
  • CarPlay(仅限汽车销售商):设置气候控制设置,除霜器设置,座椅温度,广播电台,音频源,将车辆设置保存到配置文件或从配置文件恢复
  • 餐厅预订(需要Apple的其他支持):预订预订,获取可用的预订时间,获取用户当前的预订,获取请求预订时要使用的默认值,获取与预订相关联的用户信息

选择合适的域后,开发团队可以通过构建向其注册的扩展来利用SiriKit。 Siri通过四个步骤处理用户请求:语音,当用户清楚地表达命令时; 目的:当命令被解释并与应用程序可以执行的操作匹配时; 操作,当由应用程序和响应执行意图中指定的操作时,当要求用户确认意图是否正确以及他们是否要继续执行操作时。 **注意:此样本需要在设备上构建。

在Objective-C和Swift 3.0中查看SiriKit的代码示例。

NSPersistentContainer

设置Core Data堆栈曾经需要很多工作。 我们将需要创建模型,然后创建持久性存储协调器,然后创建托管对象上下文。 这样做的代码很长,并且每个项目几乎完全相同。 对于只想开始编写代码的人来说,了解这些类及其协同工作的方式可能是一个相对较大的障碍。 这就是为什么替代数据库开始流行的原因。 现在,新的NSPersistentContainer类为我们包装了所有繁琐的工作,并提供了一些方便的新功能。

NSPersistentContainer封装了整个核心数据堆栈设置。 我们得到的是一个简单的接口,通过它我们可以忽略持久性Store和持久性Coordinator的存在。 它还可以方便地进行核心数据操作,例如保存和检索信息,同时根据需要为我们提供线程安全的工作上下文。

在Objective-C和Swift 3.0中查看NSPersistentContainer的代码示例。

NSQueryGenerationToken

毫无疑问,核心数据框架的关键功能是错误。 由于存在故障,Core Data仍会表现不佳,并确保Core Data的内存占用量保持在可接受的水平。

但是故障有时会导致意外的问题。 如果永久存储中故障的基础数据被删除,则核心数据将无法再执行该故障,从而可能导致不良行为甚至崩溃。 而且,如果我们正在努力使用户界面响应持久存储中不再存在的数据,那么核心数据查询代就是解决我们问题的方法。

查询生成在iOS 10中可用。顾名思义,查询生成是持久性存储中数据的快照。 受管对象上下文可以选择将自身固定到查询生成,这意味着它与持久性存储中的数据快照进行交互。 托管对象上下文为查询生成提供了一个窗口。 无论持久性存储中的数据发生什么变化,被管理对象上下文都会继续查看查询生成的数据并与之交互。

对于使用多个托管对象上下文的应用程序,每个托管对象上下文都可以独立工作。 一个受管对象上下文所做的更改不一定会影响其他受管对象上下文。 如果我们的应用程序的持久存储为WAL模式的SQLite数据库,则只能使用查询生成。 这是在项目中使用Core Data时最常见的设置,这意味着我们无需进行任何更改即可开始受益于查询生成。

在Objective-C和Swift 3.0中查看NSQueryGenerationToken的代码示例。

语音识别

语音识别不是一个新概念,但它无疑是一个功能,极大地促进了我们使用设备进行操作的方式。 iOS用户习惯于使用Siri与应用程序进行交互,并且在使用听写命令捕获键盘可见键盘的情况下。 语音识别框架使我们无需键盘即可扩展和增强应用程序中的语音识别体验。

新框架使用与Siri和Dictation相同的基础技术。 它提供了快速准确的结果,可以透明地为用户定制,而无需收集任何用户数据。 该框架还提供了有关识别的更多信息,而不仅仅是文本。 它提供了用户可能说的话,置信度水平和时间信息的替代解释。 我们可以控制何时停止听写,也可以在用户讲话时显示结果,语音识别引擎将自动适应用户的偏好(语言,词汇,姓名等)。

可以从预先录制的文件或实时源(如麦克风)提供API的音频。 iOS 10支持从阿拉伯语到越南语的50多种语言和方言。 支持运行iOS 10的任何设备。 语音识别API通常在Apple的服务器上完成繁重的工作,这需要Internet连接。 但是,某些较新的设备始终支持语音识别。 **注意:此样本需要在设备上构建。

在Objective-C和Swift 3.0中查看SpeechRecognition的代码示例。

AVCapturePhotoOutput

AVCapturePhotoOutput是一个新界面,用于在iOS 10中拍照,这是AV基础相机捕捉API的一部分。 新型iPhone和iPad中的相机和相关硬件功能强大到令人难以置信,AVCapturePhotoOutput API是向开发人员提供基于相机的复杂功能的API。 除了静态图像的基本捕获之外,下面还列出了AVCapturePhotoOutput支持的一系列令人印象深刻的专业级图像捕获格式和功能:

  • 压缩图像,例如JPEG
  • 流行的像素缓冲区格式的未压缩(但已处理)图像
  • RAW图像:经过最少处理的相机传感器数据(iPhone 6/7,iPhone 6/7 Plus,iPhone SE,iPad Pro)
  • RAW图像的DNG文件格式
  • RAW + JPEG同时捕获
  • 在支持的设备(iPhone 7,iPhone 7 Plus,iPad Pro)上进行宽色域色彩捕获
  • 同时交付预览尺寸的图像
  • 包围曝光多次曝光
  • 实时照片:照片附有简短的视频剪辑,可捕捉照片拍摄前后的瞬间(iPhone 6/7,iPhone 6/7 Plus,iPhone SE,iPad Pro)
  • 手动控制闪光,曝光,ISO,图像稳定和白平衡等设置

**注意:此样本需要在设备上构建。

在Objective-C和Swift 3.0中查看AVCapturePhotoOutput的代码示例。

UIGraphicsRenderer

UIGraphicsRenderer是一个新的UI图形渲染类。 UIGraphicsRenderer解决的前一种渲染方法的一个大问题是-仅32位sRGB。 如果您使用的是9.7英寸iPad,那么使用UIGraphicsRenderer,您将获得宽广的色彩环境。 如果不是,您将获得经典上下文。

UIGraphicsRenderer的另一个优点是基于块的,这使它的使用更加容易。 此外,此类管理UI图形上下文的生存期,这意味着可以在下面进行一些内存优化。 并且,它具有基于对象的API,因此它具有两个用于渲染图像的子类:UIGraphicsImageRenderer和用于渲染PDF的UIGraphicsPDFRenderer。

在Objective-C和Swift 3.0中查看UIGraphicsRenderer的代码示例。

用户通知

通过iOS 10,tvOS 10和WatchOS 3,Apple引入了一个称为UserNotification框架的新框架。 这是一组全新的API,它们统一了开发人员在不同平台上使用本地和远程通知的方式。 这个iOS 10丰富的通知框架替代了以前的平台特定的接口,用于创建和调度现已弃用的本地和远程通知。

借助UserNotifications框架,开发人员可以根据特定条件(例如时间或位置)安排本地通知的传递。 新框架还提供了更好的通知管理。 这些应用现在可以访问待处理的通知或已交付给用户的通知,从而可以删除甚至更新通知。 通知呈现给用户的方式的最大变化可能是将自定义视图和操作嵌入到他们中的能力。 此外,iOS 10丰富的通知可以与系统在应用程序中支持的外观和感觉完全相同。

在Objective-C和Swift 3.0中查看UserNotifications的代码示例。

UICollectionViewDataSourcePrefetching

使用UICollectionView的每个应用程序都有望获得出色的滚动性能。 在iOS 10中,Apple引入了一个新的UICollectionViewDataSource协议扩展,称为UICollectionViewDataSourcePrefetching。 该协议为收集视图的数据需求提供了预先警告,允许触发异步数据加载操作。

UICollectionViewCellPreFetching默认情况下处于启用状态,因此在iOS 10上编译的应用程序会自动获得更好的滚动性能。 要走得更远,开发人员可以实现两种协议方法,这两种方法都可以异步且提前地实现与数据相关的昂贵任务(解码图像,访问数据库,从服务器加载数据等)。 如果不再需要排队的数据相关任务,也可以将其取消。

在Objective-C和Swift 3.0中查看UICollectionViewDataSourcePrefetching的代码示例。

UIPreviewInteraction

UIPreviewInteraction是iOS 10中的新类,允许开发人员在指定的任何视图上插入3D Touch操作的进度。 进度取决于我们在屏幕上按的力度。 另一个有趣的事情是,我们得到两个分别对应于窥视和弹出的调用。 由于“窥视”和“弹出”是“预览”功能,因此这意味着我们可以进一步与它们两者交互并与每个动作并行执行代码。 它还具有与Peek和Pop相同的力量处理,并具有自动触觉反馈。 **注意:此样本需要在设备上构建。

在Objective-C和Swift 3.0中查看UIPreviewInteraction的代码示例。

期待

随着时间的流逝,随着每个WWDC的推出,Apple继续通过更多框架和iOS 10丰富通知来改进iOS。 这为我们的用户提供了创建更深入,更实用的体验的能力。 而且,Apple似乎继续将这些框架的易用性放在更大的位置。 这降低了新用户体验的进入门槛。 WWDC 2017将于6月初举行,当然,随着iOS 11的发布,肯定会展示令人兴奋的新框架。随着这些发布和公告的发布,上述的某些交互可能也将得到改进,从而使它们成为渴望开发者的更有价值的资产以提高其应用程序的可读性,性能和可靠性。

查看完整的iOS 10 Sampler存储库。

与我们一起创新! 单击 此处 以访问我们所有的免费资源。
Nikolay Andonov Dobrinka Tabakova撰写