个言
很久没发随笔了,有一年多了吧。期间也曾想继续去写随笔,但是因为各种原因而耽搁了。最近又想了一下,还是有很多东西想要写,想要分享,想要记录下来的东西。之后我也会不断写随笔,但不止于 ios 的方向,也想去体验一下新东西。在此不多说,我们开始阅读正文吧。
简介
在支持 3d touch 的设备上,quick actions 可以让用户更快,更少的操作步骤去完成他们最常做的事情,其中这么多操作可以通过主屏幕直接完成。比如用力地长按微信图标,会弹出诸如"扫一扫"和"我的二维码"等常用功能,这个我在加好友的情况下经常会用到,不是"扫"别人就是被别人"扫"。然后这是它的官方介绍,3d touch - ios - apple developer。
本文的 demo 已放到 github 上,demo 请到 garveycalvin/ios-travel 下载。
支持的设备是在 iphone 6s 和 6s plus 及后续出的 iphone 系列,系统则是从 ios 9.0 开始支持 3d touch。
info.plist 创建快捷方式
快捷方式支持在 info.plist 里直接定义,主键是uiapplicationshortcutitems,它是一个数组array。各个 key 值可以在查看information property list key reference,在这里简单地介绍一下各个 key 的作用。
key | 作用 |
---|---|
uiapplicationshortcutitemtype(必需) | 唯一标识 |
uiapplicationshortcutitemtitle(必需) | 显示的标题 |
uiapplicationshortcutitemsubtitle(可选) | 显示的副标题 |
uiapplicationshortcutitemicontype(可选) | 使用系统的图标 |
uiapplicationshortcutitemiconfile(可选) | 使用项目的图标 |
uiapplicationshortcutitemuserinfo(可选) | 附加的信息 |
以下是一个详细的例子,上述的 key 除了 uiapplicationshortcutitemuserinfo 外,其它都实现了。
现在我们来看看运行效果,值得一提的是,图标分别在上半屏和下半屏的情况下,显示的排序是会不同的,具体运行效果如下所示。
图标在上半屏
图标在下半屏
判断用户点击了哪个快捷方式
通过在 appdelegate.m 文件中实现 uiapplicationdelegate 的代理方法
application:performactionforshortcutitem:completionhandler:,可以得知用户是从哪个快捷方式进来的,具体代码如下。
1
2
3
4
5
6
7
8
9
10
11
|
- ( void )application:(uiapplication *)application performactionforshortcutitem:(uiapplicationshortcutitem *)shortcutitem completionhandler:( void (^)( bool ))completionhandler api_available(ios(9.0)) { nslog(@ "%s" , __function__); if ([shortcutitem.type isequaltostring:@ "search" ]) { nslog(@ "用户从快捷方式“搜索”进来的" ); } else if ([shortcutitem.type isequaltostring:@ "list" ]) { nslog(@ "用户从快捷方式“榜单”进来的" ); } else if ([shortcutitem.type isequaltostring:@ "public" ]) { nslog(@ "用户从快捷方式“一键发布”进来的" ); } } |
代码创建快捷方式
快捷方式也支持代码创建,每一个 uiapplicationshortcutitem 就是一个快捷方式,一般在 appdelegate.m 文件中实现方法 application:didfinishlaunchingwithoptions: 里编写实现代码,代码比较易懂,这里就不再说明了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
- ( bool )application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions { nslog(@ "%s" , __function__); if (@available(ios 9.0, *)) { uiapplicationshortcuticon *searchicon = [uiapplicationshortcuticon iconwithtype:uiapplicationshortcuticontypesearch]; uiapplicationshortcutitem *search = [[uiapplicationshortcutitem alloc] initwithtype:@ "search" localizedtitle:@ "搜索" localizedsubtitle:nil icon:searchicon userinfo:nil]; uiapplicationshortcuticon *publicicon = [uiapplicationshortcuticon iconwithtemplateimagename:@ "upload" ]; uiapplicationshortcutitem * public = [[uiapplicationshortcutitem alloc] initwithtype:@ "public" localizedtitle:@ "一键发布" localizedsubtitle:nil icon:publicicon userinfo:nil]; uiapplicationshortcutitem *list = [[uiapplicationshortcutitem alloc] initwithtype:@ "list" localizedtitle:@ "榜单" localizedsubtitle:@ "全区排行" icon:nil userinfo:nil]; application.shortcutitems = @[list, public , search]; } return yes; } |
资料
本文的 demo 已放到 github 上,demo 请到 garveycalvin/ios-travel 下载。
环境
xcode: version 10.1 (10b61)
测试机型:iphone xs max
测试系统:ios 12.1
总结
无论是在 info.plist 或 代码 创建 quick actions 都比较简单,没什么很复杂的逻辑,学起来很容易。
quick actions 的使用情况还是比较多的,就我而言,我经常会用支付宝和微信放出来的"扫一扫",支付宝的"乘车码"等等。
3d touch 的应用范围不止这些,还有 peek and pop 和 pressure sensitivity,在以后或许会补上这系列的文章。
原文链接:https://www.cnblogs.com/GarveyCalvin/p/3d-touch-series-quick-action.html