iOS系统3DTouch全解析
概述
ios10登录中国,在系统中对3d touch的使用需求更频繁,所以对ios9中便引入的3d touch功能做一些了解是很有必要的
在日常开发中,我们经常需要使用3d touch中的两个功能
在主屏幕上对应用图标使用3dtouch操作
在应用程序内对某一控件使用3dtouch操作
shortcutitem
概述
shortcutitem功能允许用户在主屏幕上对应用图标使用3dtouch操作,如果本次操作有效,则会给出几个快捷可选项允许用户进行操作
静态添加
在info.plist中添加uiapplicationshortcutitems关键字,以如下方式配置即可
其中各个关键字释义如下:
uiapplicationshortcutitemtype: 快捷可选项的特定字符串(必填)
uiapplicationshortcutitemtitle: 快捷可选项的标题(必填)
uiapplicationshortcutitemsubtitle: 快捷可选项的子标题(可选)
uiapplicationshortcutitemicontype: 快捷可选项的图标(可选)
uiapplicationshortcutitemiconfile: 快捷可选项的自定义图标(可选)
uiapplicationshortcutitemuserinfo: 快捷可选项的附加信息(可选)
动态添加
uiapplicationshortcutitem
每一个快捷可选项是一个uiapplicationshortcutitem对象,其指定初始化器(ns_designated_initializer)如下
-(instancetype)initwithtype:(nsstring*)typelocalizedtitle:(nsstring*)localizedtitlelocalizedsubtitle:(nullablensstring*)localizedsubtitleicon:(nullableuiapplicationshortcuticon*)iconuserinfo:(nullablensdictionary*)userinfo;
其中各个参数释义如下:
type: 快捷可选项的特定字符串(必填)
localizedtitle: 快捷可选项的标题(必填)
localizedsubtitle: 快捷可选项的子标题(可选)
icon: 快捷可选项的图标(可选)
userinfo: 快捷可选项的附加信息(可选)
uiapplicationshortcuticon
每一个快捷可选项图标为一个uiapplicationshortcuticon对象,我们可以使用系统提供的多个图标,也可以自定义我们自己的图标
//使用系统提供的图标
+(instancetype)iconwithtype:(uiapplicationshortcuticontype)type;
//自定义图标
+(instancetype)iconwithtemplateimagename:(nsstring*)templateimagename;
系统提供的图标样式如下:
注: 自定义图标需要使用镂空图标,同时建议1倍图标大小为35*35
示例
//以"动态添加四个快捷可选项"为例 uiapplicationshortcuticon*searchshortcuticon=[uiapplicationshortcuticoniconwithtype:uiapplicationshortcuticontypesearch]; uiapplicationshortcutitem*searchshortcutitem=[[uiapplicationshortcutitemalloc]initwithtype:@"com.liupeng.search"localizedtitle:@"search"localizedsubtitle:@"searchsubtitle"icon:searchshortcuticonuserinfo:nil]; uiapplicationshortcuticon*playshortcuticon=[uiapplicationshortcuticoniconwithtype:uiapplicationshortcuticontypeplay]; uiapplicationshortcutitem*playshortcutitem=[[uiapplicationshortcutitemalloc]initwithtype:@"com.liupeng.play"localizedtitle:@"play"localizedsubtitle:@"playsubtitle"icon:playshortcuticonuserinfo:nil]; uiapplicationshortcuticon*qrshortcuticon=[uiapplicationshortcuticoniconwithtemplateimagename:@"shortcut_qr"]; uiapplicationshortcutitem*qrshortcutitem=[[uiapplicationshortcutitemalloc]initwithtype:@"com.liupeng.qr"localizedtitle:@"qr"localizedsubtitle:@"qrsubtitle"icon:qrshortcuticonuserinfo:nil]; uiapplicationshortcuticon*payshortcuticon=[uiapplicationshortcuticoniconwithtemplateimagename:@"shortcut_pay"]; uiapplicationshortcutitem*payshortcutitem=[[uiapplicationshortcutitemalloc]initwithtype:@"com.liupeng.pay"localizedtitle:@"pay"localizedsubtitle:@"paysubtitle"icon:payshortcuticonuserinfo:nil]; [uiapplicationsharedapplication].shortcutitems=@[searchshortcutitem,playshortcutitem,qrshortcutitem,payshortcutitem];
触发回调
当用户通过点击快捷可选项进入应用程序会回调如下方法,我们可以在这里通过快捷可选项的type来加以区分,以便进行不同的操作
-(void)application:(uiapplication*)applicationperformactionforshortcutitem:(uiapplicationshortcutitem*)shortcutitemcompletionhandler:(void(^)(bool))completionhandler { if([shortcutitem.typeisequaltostring:@"com.liupeng.search"]) { //omething... } elseif([shortcutitem.typeisequaltostring:@"com.liupeng.play"]) { //dosomething... } //... }
注意
在动态添加快捷可选项前,需要用判断是否支持3d touch功能,以免在不支持的设备上运行程序导致闪退
if([selfrespondstoselector:@selector(traitcollection)]) { if([self.traitcollectionrespondstoselector:@selector(forcetouchcapability)]) { if(self.traitcollection.forcetouchcapability==uiforcetouchcapabilityavailable) { //支持3dtouch } else { //不支持3dtouch } } }
注: 在支持3d touch的设备上,用户可以在程序运行期间通过设置 -> 通用 -> 辅助功能 -> 3d touch来关闭3d touch功能,所以我们有必要通过重写-traitcollectiondidchange:方法随时处理
peek & pop
概述
peek和pop是应用内的一种全新交互模式,当用户不断增加力量在控件上按压,会依次进入四个阶段
轻按控件,除触发peek的控件外,其他区域全部虚化
继续用力peek被触发,展示pop界面快照
向上滑动展示快捷选项
继续用力跳转进入pop界面
使用
以"从viewcontroller中的uilabel控件通过peek & pop进入detailviewcontroller"为例,对peek & pop的使用进行一下讲解
需要实现peek & pop交互的控件所在的控制器遵守uiviewcontrollerpreviewingdelegate协议
@interfaceviewcontroller() @end
在控制器内为需要实现peek & pop交互的控件注册peek & pop功能
[selfregisterforpreviewingwithdelegate:selfsourceview:label];
当进入peek状态时,系统会回调如下方法
-(nullableuiviewcontroller*)previewingcontext:(id)previewingcontextviewcontrollerforlocation:(cgpoint)location { //previewingcontext.sourceview:触发peek&pop操作的视图 //previewingcontext.sourcerect:设置触发操作的视图的不被虚化的区域 detailviewcontroller*detailvc=[[detailviewcontrolleralloc]init]; //预览区域大小(可不设置) detailvc.preferredcontentsize=cgsizemake(0,300); returndetailvc; }
当进入pop状态时,系统会回调如下方法
-(void)previewingcontext:(id)previewingcontextcommitviewcontroller:(uiviewcontroller*)viewcontrollertocommit { [self.navigationcontrollerpushviewcontroller:viewcontrollertocommitanimated:yes]; }
在peek时希望提供一些快捷选项,需要在detailviewcontroller中重写previewactionitems的getter方法
-(nsarray>*)previewactionitems { uipreviewaction*action1=[uipreviewactionactionwithtitle:@"选项一"style:uipreviewactionstyledefaulthandler:^(uipreviewaction*_nonnullaction,uiviewcontroller*_nonnullpreviewviewcontroller){ }]; uipreviewaction*action2=[uipreviewactionactionwithtitle:@"选项二"style:uipreviewactionstyleselectedhandler:^(uipreviewaction*_nonnullaction,uiviewcontroller*_nonnullpreviewviewcontroller){ }]; uipreviewaction*action3=[uipreviewactionactionwithtitle:@"选项三"style:uipreviewactionstyledestructivehandler:^(uipreviewaction*_nonnullaction,uiviewcontroller*_nonnullpreviewviewcontroller){ }]; uipreviewactiongroup*actiongroup=[uipreviewactiongroupactiongroupwithtitle:@"选项组"style:uipreviewactionstyledefaultactions:@[action1,action2]]; return@[action1,action2,action3,actiongroup]; }
下一篇: 在html5中嵌入视频的方法教程