首页 > 其他分享 >iOS 3DTouch

iOS 3DTouch

时间:2023-06-15 12:32:21浏览次数:46  
标签:UIApplicationShortcutIcon iOS 3DTouch 快捷 可选项 Touch 图标 3D


概述


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


详细





iOS 3DTouch_3DTouch

概述

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

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

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

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

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


一、准备工作


iOS 3DTouch_iOS_02


第一部分的应用是我们可以通过3D手势,在主屏幕上的应用Icon处,直接进入应用的响应功能模块。这个功能就例如我们上面的日历示例,会在Icon旁边出现一个菜单,点击菜单我们可以进入相应的功能单元。

我个人理解,这个功能,push消息功能加上iOS8推出的扩展today功能,这三个机制使iOS应用变得无比灵活方便,用户可以不需付出寻找的时间成本来快速使用自己需要的功能。

第二部分是对app的一个优化,用户可以通过3D Touch手势在view上来预览一些预加载信息,这样的设计可以使app更加简洁大方,交互性也更强。

在我们的app中使用3D Touch功能,主要分为以下三个模块:

1、Home Screen Quick Actions

通过主屏幕的应用Icon,我们可以用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发。如上面的日历。

2、peek and pop

这个功能是一套全新的用户交互机制,在使用3D Touch时,ViewController中会有如下三个交互阶段:

3.Force Properties

iOS9为我们提供了一个新的交互参数:力度。我们可以检测某一交互的力度值,来做相应的交互处理。例如,我们可以通过力度来控制快进的快慢,音量增加的快慢等。

二、程序实现

静态添加

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


iOS 3DTouch_iOS_03

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

UIApplicationShortcutItemType: 快捷可选项的特定字符串(必填)
UIApplicationShortcutItemTitle: 快捷可选项的标题(必填)
UIApplicationShortcutItemSubtitle: 快捷可选项的子标题(可选)
UIApplicationShortcutItemIconType: 快捷可选项的图标(可选)
UIApplicationShortcutItemIconFile: 快捷可选项的自定义图标(可选)
UIApplicationShortcutItemUserInfo: 快捷可选项的附加信息(可选)

动态添加

UIApplicationShortcutItem

每一个快捷可选项是一个UIApplicationShortcutItem对象,其指定初始化器(NS_DESIGNATED_INITIALIZER)如下

- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo;

其中各个参数释义如下:

type: 快捷可选项的特定字符串(必填)
localizedTitle: 快捷可选项的标题(必填)
localizedSubtitle: 快捷可选项的子标题(可选)
icon: 快捷可选项的图标(可选)
userInfo: 快捷可选项的附加信息(可选)

UIApplicationShortcutIcon

每一个快捷可选项图标为一个UIApplicationShortcutIcon对象,我们可以使用系统提供的多个图标,也可以自定义我们自己的图标

// 使用系统提供的图标
+ (instancetype)iconWithType:(UIApplicationShortcutIconType)type;

// 自定义图标
+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;

注: 自定义图标需要使用镂空图标,同时建议1倍图标大小为35*35

示例
// 以"动态添加四个快捷可选项"为例       


        UIApplicationShortcutIcon *searchShortcutIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];       


        UIApplicationShortcutItem *searchShortcutItem = [[UIApplicationShortcutItem alloc] initWithType:@        "com.liupeng.search"         localizedTitle:@        "Search"         localizedSubtitle:@        "Search Subtitle"         icon:searchShortcutIcon userInfo:nil];       


        UIApplicationShortcutIcon *playShortcutIcon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay];       


        UIApplicationShortcutItem *playShortcutItem = [[UIApplicationShortcutItem alloc] initWithType:@        "com.liupeng.play"         localizedTitle:@        "Play"         localizedSubtitle:@        "Play Subtitle"         icon:playShortcutIcon userInfo:nil];       


        UIApplicationShortcutIcon *qrShortcutIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@        "shortcut_QR"        ];       


        UIApplicationShortcutItem *qrShortcutItem = [[UIApplicationShortcutItem alloc] initWithType:@        "com.liupeng.qr"         localizedTitle:@        "QR"         localizedSubtitle:@        "QR Subtitle"         icon:qrShortcutIcon userInfo:nil];       


        UIApplicationShortcutIcon *payShortcutIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@        "shortcut_pay"        ];       


        UIApplicationShortcutItem *payShortcutItem = [[UIApplicationShortcutItem alloc] initWithType:@        "com.liupeng.pay"         localizedTitle:@        "Pay"         localizedSubtitle:@        "Pay Subtitle"         icon:payShortcutIcon userInfo:nil];       


        [UIApplication sharedApplication].shortcutItems = @[searchShortcutItem, playShortcutItem, qrShortcutItem, payShortcutItem];

触发回调

当用户通过点击快捷可选项进入应用程序会回调如下方法,我们可以在这里通过快捷可选项的type来加以区分,以便进行不同的操作

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler       


        {       


                if         ([shortcutItem.type isEqualToString:@        "com.liupeng.search"        ])       


                {       


                // do something ...       


                }       


                else         if         ([shortcutItem.type isEqualToString:@        "com.liupeng.play"        ])       


                {       


                // do something ...       


                }       


                // ...       


        }

注意

在动态添加快捷可选项前,需要用判断是否支持3D Touch功能,以免在不支持的设备上运行程序导致闪退

if         ([self respondsToSelector:@selector(traitCollection)])       


        {       


                if         ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)])       


                {       


                if         (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)       


                {       


                // 支持3D Touch       


                }       


                else       


                {       


                // 不支持3D Touch       


                }       


                }       


        }

注: 在支持3D Touch的设备上,用户可以在程序运行期间通过设置 -> 通用 -> 辅助功能 -> 3D Touch来关闭3D Touch功能,所以我们有必要通过重写-traitCollectionDidChange:方法随时处理

Peek & Pop

概述

Peek和Pop是应用内的一种全新交互模式,当用户不断增加力量在控件上按压,会依次进入四个阶段。


iOS 3DTouch_3DTouch_04


iOS 3DTouch_3D_05

iOS 3DTouch_iOS_06

三、运行效果

1,最初cell样式:

iOS 3DTouch_3DTouch_07

2,轻按控件,除触发Peek的控件外,其他区域全部虚化

3,继续用力Peek被触发,展示Pop界面快照


iOS 3DTouch_3D_08

4,向上滑动展示快捷选项


iOS 3DTouch_iOS_09

5,继续用力跳转进入Pop界面

我的项目中还加入了触摸屏幕的力度 会实时的显示在屏幕上



标签:UIApplicationShortcutIcon,iOS,3DTouch,快捷,可选项,Touch,图标,3D
From: https://blog.51cto.com/u_7583030/6486236

相关文章

  • 问题修复:华硕主板开机无法进入BIOS
    华硕主板开机无法进入BIOS,问题可能是用双显示屏或投影仪产生的。解决方法来自网络搜索华硕在线客服告诉我说是没有在BIOS里开启CSM选项,里面有个“从PCI-E/PCI扩展设备启动”,他说先让我用HDMI的线接独显开机,这样能正常进BIOS,后面把BIOS里的CSM开启就行了,改完后接dp线就行了华......
  • 一招解锁Triller无水印视频下载技能,支持安卓和ios!!
    最近比较爱玩triller,一个类似抖音的短视频平台,不同的是Triller平台的用户群体覆盖了全球200多个国家和地区,好比只面向国内的群体内容更丰富,这也是我现在喜欢用它的原因之一,唯一的缺点就是上面的视频下载下来会有水印,呜呜呜哭死我了!我连找了三天,终于被我找到了能无水印下载triller视......
  • vue整合axios
    一、整合axios(底层支持ES6新的对象:Promise)①安装axios参照官网:http://axios-js.com/docs/index.html直接安装(不指定版本的话),会安装最新的版本,最新的axios版本只支持vue3,所以要指定axios的vue2的版本npminstall--saveaxios@0vue-axios@2②配置main.jsok③确认a......
  • virtualBox 报VT-x is disabled in the BIOS for both all CPU modes (VERR_VMX_MSR_A
    背景:主机是ASUS主板操作系统是deepin20.0系统,需要安装win10,下载virtualbox和win10镜像iso,virtualbox设置完后,启动win10,virtualbox报错VT-xisdisabledintheBIOSforbothallCPUmodes(VERR_VMX_MSR_ALL_VMX_DI的错误.原因:主机没有开启cpu虚拟化技术支持解决:   ......
  • IOS静态库相关-封装lib
     IOS静态库相关-封装lib    第一:基本知识    在实际的编程过程中,通常会把一些公用函数制成函数库,供其它程序使用,一则提搞了代码的复用;二则提搞了核心技术的保密程度。所以在实际的项目开发中,经常会使用到函数库,函数库分为静态库和动态库两种。和多数人所熟悉的动......
  • axios-使用解构赋值
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><title></title></head><body><buttonid="btnPost">发起POST请求</button><buttonid="btnG......
  • axios-结合async和await调用axios
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title></head><body><buttonid="btnPost">发起POST请求</button><scriptsrc="lib/axios.js">&......
  • 2015年11月Xcode7.1(7B91b)打包发布苹果iOS应用指南
    2015年11月Xcode7.1(7B91b)打包发布苹果iOS应用指南 第1步:配置项目的开发授权证书(图1)如图1,选择TARGETS下的项目名称。(图2)如图2,选择BuildSettings,然后找到ProvisioningProfile. (图3)如图3,选择distribution的开发授权证书。这个distribution的开发授权证书来自苹果开发者后台配置......
  • ios NSString format 保留小数点 float double
     iosNSStringformat保留小数点floatdouble self.orderCost.text=[NSStringstringWithFormat:@"%.1f元",self.order.cost.floatValue];%.1f 表示小数点一位,%.2f表示小数点2位,依次类推.格式定义TheformatspecifierssupportedbytheNSStringformattingmethodsa......
  • iOS程序运行生命周期
    iOS程序运行生命周期  在文件AppDelegate.m中定义了iOS程序运行的各个生命周期,清楚了解程序运行中的每个生命周期,对于我们的开发工作将提供极大的帮助。下面代码就是AppDelegate.m中各生命周期对应的方法。 -(BOOL)application:(UIApplication*)applicationdidFinishLaunch......