当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS系统3DTouch全解析

iOS系统3DTouch全解析

2018年09月13日  | 移动技术网IT编程  | 我要评论

黑道新星下载,天下无雷,又名站长网

1598380-ce64d85392fec90b.png

概述

ios10登录中国,在系统中对3d touch的使用需求更频繁,所以对ios9中便引入的3d touch功能做一些了解是很有必要的

在日常开发中,我们经常需要使用3d touch中的两个功能

在主屏幕上对应用图标使用3dtouch操作

在应用程序内对某一控件使用3dtouch操作

shortcutitem

概述

shortcutitem功能允许用户在主屏幕上对应用图标使用3dtouch操作,如果本次操作有效,则会给出几个快捷可选项允许用户进行操作

1598380-639f29ad93955e85.png.jpeg

静态添加

在info.plist中添加uiapplicationshortcutitems关键字,以如下方式配置即可

1598380-5e81589b26316d66.png.jpeg

其中各个关键字释义如下:

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;

系统提供的图标样式如下:

1598380-d71a9a3119791ecc.png.jpeg

注: 自定义图标需要使用镂空图标,同时建议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的控件外,其他区域全部虚化

1598380-99232e7e6d3c1571.png

继续用力peek被触发,展示pop界面快照

1598380-2928eafae42b95a6.png

向上滑动展示快捷选项

1598380-694cb915011c2d76.png

继续用力跳转进入pop界面

1479086880697130.png

使用

以"从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]; }

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网