- iOS开发实战:从入门到上架App Store(第2版) (移动开发丛书)
- 张益珲
- 2209字
- 2020-11-28 14:56:40
1.1 iOS 10新特性简述
iOS 10是iOS系统的一次重大升级,提供了更加人性化的触觉用户体验,也为开发者提供了接口,开发者可以使用接口使自己应用程序的用户体验更加优秀。iOS 10系统首次向开发者开放了SiriKit框架,借助Apple的Siri服务,开发者可以开发出更加优秀的人机交互应用。除此之外,iOS 10中的Message App和CallKit框架的开放、UserNotification框架的引入等使得开发者可以更加灵活地开发新一代的iOS应用。熟悉iOS 10的这些新特性可以更好地帮助读者学习iOS应用程序的开发。
1.1.1 新增触觉反馈编程接口
在iPhone 6s发行之后,很多果粉都争先体验3D Touch给用户带来的额外维度上的交互,随着iPhone 7与iPhone 7s的问世,Apple进一步深化了用户交互上的体验。iPhone 7与iPhone 7s配合iOS 10以上的系统可以给用户带来视觉与触觉上的双重体验。在iOS 10以上的系统中新引入了3个类,分别为UIImpactFeedbackGenerator类、UINotificationFeedbackGenerator类与UISelectionFeedbackGenerator类。当用户触发某些交互事件时,开发者可以通过这些类为用户提供额外的触觉体验,请看下面的示例代码。
Swift语言版本:
//用户触发某些事件后执行 func feedbackStart(style:Int) { switch style { case 1: //进行强烈触觉反馈 let imp = UIImpactFeedbackGenerator(style: .heavy) imp.impactOccurred() case 2: //进行正常触觉反馈 let imp = UIImpactFeedbackGenerator(style: .light) imp.impactOccurred() case 3: //进行轻量触觉反馈 let imp = UIImpactFeedbackGenerator(style: .medium) imp.impactOccurred() case 4: //适用于通知的反馈 let imp = UINotificationFeedbackGenerator() //错误类型通知时的反馈 imp.notificationOccurred(.error) case 5: let imp = UINotificationFeedbackGenerator() //成功类型通知时的反馈 imp.notificationOccurred(.success) case 6: let imp = UINotificationFeedbackGenerator() //警告类型通知时的反馈 imp.notificationOccurred(.warning) case 7: //当用户选择的选项修改时的反馈 let imp = UISelectionFeedbackGenerator() imp.selectionChanged() default: break } }
Objective-C语言版本:
-(void)feedbackStart:(int)style{ switch (style) { case 1: { //进行强烈触觉反馈 UIImpactFeedbackGenerator * imp = [[UIImpactFeedbackGenerator alloc]initWithStyle: UIImpactFeedbackStyleHeavy]; [imp impactOccurred]; } break; case 2: { //进行正常触觉反馈 UIImpactFeedbackGenerator * imp = [[UIImpactFeedbackGenerator alloc]initWithStyle: UIImpactFeedbackStyleMedium]; [imp impactOccurred]; } break; case 3: { //进行轻量触觉反馈 UIImpactFeedbackGenerator * imp = [[UIImpactFeedbackGenerator alloc]initWithStyle: UIImpactFeedbackStyleLight]; [imp impactOccurred]; } break; case 4: { //错误类型通知的反馈 UINotificationFeedbackGenerator * imp = [[UINotificationFeedbackGenerator alloc]init]; [imp notificationOccurred:UINotificationFeedbackTypeError]; } break; case 5: { //成功类型通知的反馈 UINotificationFeedbackGenerator * imp = [[UINotificationFeedbackGenerator alloc]init]; [imp notificationOccurred:UINotificationFeedbackTypeSuccess]; } break; case 6: { //警告类型通知的反馈 UINotificationFeedbackGenerator * imp = [[UINotificationFeedbackGenerator alloc]init]; [imp notificationOccurred:UINotificationFeedbackTypeWarning]; } break; case 7: { //用户选择选项更改的反馈 UISelectionFeedbackGenerator * imp = [[UISelectionFeedbackGenerator alloc]init]; [imp selectionChanged]; } break; default: break; } }
需要注意,只有iPhone 7与iPhone 7s以上的设备支持触觉反馈功能,低型号的设备即便安装了iOS 10以上的系统也不会有效果。
提示 这里的代码只是作为示例,读者可以不必深究其原理与使用方法,读者可以学习完后面的章节,具备开发iOS实际应用的能力后,再来学习此段代码。
1.1.2 SiriKit框架的开放
Apple在iOS 10系统中为开发者开放了SiriKit框架,这是一件非常令人激动的事。通过SiriKit框架,开发者可以将Siri的功能集成到自己的应用程序中,为用户带来更加方便的使用体验。SiriKit框架所适合的开发需求有:音频或视频通话、发送消息、接收付款、搜索照片、管理日志、餐厅预定等。Siri可以对所有用户的交互行为进行处理,当然开发者也可以根据需求自定义界面。
1.1.3 引入Messages App
Messages是iOS系统中原生的信息应用,既可以通过运营商网络发送短信息,又可以通过互联网进行类似微信类社交软件的即时聊天。但是由于其封闭性与功能的单一,使用Messages进行即时聊天的用户并不多。随着iOS 10系统的推出,或许可以改变这一现状。在iOS 10系统中,Messages的功能被扩展的十分强大。通过Messages用户可以分享图片、音乐、视频,可以随手涂鸦、使用自定义的表情包,可以进行Apple Pay支付、购物,甚至可以在Messages中玩游戏。上面所提到的这些功能都全面开放出了接口供开发者进行开发与扩展。
在iOS 10中,开发者与Messages相关的开发有两类:独立的Messages应用与Messages应用扩展。其中,Messages应用扩展需要依附一个宿主App而存在。无论哪种类型的Messages应用,都又分为两类,Sticker Picks(表情包)与Message Apps(Messages应用)。
Sticker Picks可谓是iOS 10中一个十分强大的新功能。在iOS 10系统的iPhone上,Messages应用中会内嵌一个Message App Store,用户可以直接从里面下载针对Messages的独立表情包和独立第三方应用。开发者也可以独立开发表情包发布到Message App Store中。
开发Sticker Picks表情包十分简单,开发者可以不用写一句代码,将整理好的表情进行打包提交即可完成。使用Xcode 8开发工具创建一个新的工程,选择Sticker Pack Application模板,如图1-1所示。
图1-1 创建Sticker Pack表情包
创建工程后,发现模板中没有任何代码文件,只有一个Stickers.xcstickers包。将准备好的表情包图片导入这个Stickers中,支持静态图片,也支持动态表情gif图片。关于导入的图片,有如下几条规则:
(1)图片文件的格式必须是PNG、APNG、GIF或JPEG。
(2)单个文件的大小不能超过500KB。
(3)最优的效果是图片尺寸在100×100到206×206之间。
提示 在提供图片的时候,开发者只需要提供@3倍图即可,即最优尺寸在300×300到618× 618之间的图片。系统会自动生成@2与@1倍图。
独立的Message App要复杂一些,开发者可以使用Messages框架中定义的类进行界面与逻辑的开发。对于Message App,实现列表界面、多界面跳转等都十分方便,并且可以和原生的Messages应用进行交互,这为一些互动小游戏的开发提供了可能。等到读者学习掌握了本书中介绍的iOS开发技术后,可以再深入研究一下Message App的开发。
1.1.4 通知框架的整合与扩展
关于通知,无论是远程Push还是本地通知,以往的iOS系统暴露给开发者的接口都是十分有限的,开发者只能对标题和内容进行简单的定义,至于UI展示和用户交互行为相关的部分,开发者开发起来都十分困难。iOS 10系统之前的本地通知采用的是UILocationNotification类,远程通知则由Apple服务器进行转发,本地通知和远程通知回调的处理都是通过AppDelegate中的几个回调方法完成的。在iOS 10系统中,通知功能的增强是一大优化之处,iOS 10系统将通知功能整合成了一个完整框架——UserNotification。UserNotification框架相比之前的通知功能更加强大,主要表现在如下几点:
(1)通知处理代码可以从AppDelegate中剥离。
(2)通知的注册、设置、处理更加结构化,更易于模块化开发。
(3)UserNotification支持自定义通知音效和启动图。
(4)UserNotification支持向通知内容中添加媒体附件,如音频、视频。
(5)UserNotification支持开发者定义多套通知模板。
(6)UserNotification支持完全自定义的通知界面。
(7)UserNotification支持自定义通知中的用户交互按钮。
(8)通知的触发更加容易管理。