iOS开发-实现3DTouch按压App快捷选项shortcutItems及跳转功能

iOS开发-实现3DTouch按压App快捷选项shortcutItems及跳转功能

App的应用图标通过3D Touch按压App图标,会显示快捷选项,点击选项可快速进入到App的特定页面。

这里用到了UIApplicationShortcutItem与UIMutableApplicationShortcutItem

一、效果图

在这里插入图片描述
这里暂时着了一张图代替了。

二、UIApplicationShortcutItem与UIMutableApplicationShortcutItem

UIApplicationShortcutItem

@interface UIApplicationShortcutItem : NSObject <NSCopying, NSMutableCopying>- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary<NSString *, id <NSSecureCoding>> *)userInfo NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle;
...

UIMutableApplicationShortcutItem

@interface UIMutableApplicationShortcutItem : UIApplicationShortcutItem// An application-specific string that identifies the type of action to perform.
@property (nonatomic, copy) NSString *type;// Properties controlling how the item should be displayed on the home screen.
@property (nonatomic, copy) NSString *localizedTitle;
@property (nullable, nonatomic, copy) NSString *localizedSubtitle;
@property (nullable, nonatomic, copy) UIApplicationShortcutIcon *icon;// Application-specific information needed to perform the action.
// Will throw an exception if the NSDictionary is not plist-encodable.
@property (nullable, nonatomic, copy) NSDictionary<NSString *, id <NSSecureCoding>> *userInfo;// used with UISceneActivationConditions to customize what scene should be activated for a shortcut
@property (nullable, nonatomic, copy) id targetContentIdentifier;@end

三、shortcutItems及跳转功能

通过配置需要当3DTouch按压显示的快捷ShortcutItem及跳转代码如下

#import "SD3DTouchManager.h"
#import "SDSessionManager.h"static SD3DTouchManager *shareInstance = nil;@implementation SD3DTouchManager+ (instancetype)sharedInstance {static dispatch_once_t onceToken = 0;dispatch_once(&onceToken, ^{shareInstance = [[SD3DTouchManager alloc] init];});return shareInstance;
}- (void)creat3DShortcutItem {if (IS_IOS9_OR_LATER) {UIApplicationShortcutIcon *sendIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ic_bar_search"];UIApplicationShortcutItem *sendItem = [[UIApplicationShortcutItem alloc]initWithType:SD_3D_WE_SEND localizedTitle:@"找代送" localizedSubtitle:nil icon:sendIcon userInfo:nil];UIApplicationShortcutIcon *buyIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ic_note_comment"];UIApplicationShortcutItem *buyItem = [[UIApplicationShortcutItem alloc]initWithType:SD_3D_WE_BUY localizedTitle:@"找代买" localizedSubtitle:nil icon:buyIcon userInfo:nil];UIApplicationShortcutIcon *rechargeIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ic_note_tag"];UIApplicationShortcutItem *rechargeItem = [[UIApplicationShortcutItem alloc]initWithType:SD_3D_RECHARGE localizedTitle:@"一键充值" localizedSubtitle:nil icon:rechargeIcon userInfo:nil];UIApplicationShortcutIcon *profileIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"ic_mine"];UIApplicationShortcutItem *profileItem = [[UIApplicationShortcutItem alloc]initWithType:SD_3D_RECHARGE localizedTitle:@"我的信息" localizedSubtitle:nil icon:profileIcon userInfo:nil];[UIApplication sharedApplication].shortcutItems = @[sendItem,buyItem,rechargeItem,profileItem];}
}- (BOOL)application3DShortcutOptions:(NSDictionary *)launchOptions {BOOL luanched = YES;if (IS_IOS9_OR_LATER) {UIApplicationShortcutItem *shortcutItem = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];if (shortcutItem) {//判断设置的快捷选项标签唯一标识,根据不同标识执行不同操作[self apply3DTouch:shortcutItem];luanched = NO;}}return luanched;
}- (void)apply3DTouch:(UIApplicationShortcutItem *)shortcutItem {if ([SDSessionManager shareInstance].isLogin) {UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;UINavigationController *navigationController;if ([controller isKindOfClass:[UINavigationController class]]) {navigationController = (UINavigationController *)controller;} else {navigationController = controller.navigationController;}if ([shortcutItem.type isEqualToString:SD_3D_WE_SEND]) {DLog(@"3D 进入代送页面");} else if ([shortcutItem.type isEqualToString:SD_3D_WE_BUY]) {DLog(@"3D 进入代买页面");} else if ([shortcutItem.type isEqualToString:SD_3D_RECHARGE]) {DLog(@"3D 进入充值页面");} else if ([shortcutItem.type isEqualToString:SD_3D_MIME_INFO]) {DLog(@"3D 进入我的信息页面");}}
}@end

在AppDelegate的didFinishLaunchingWithOptions初始化

//设置3D touch[[SD3DTouchManager sharedInstance] creat3DShortcutItem];

实现跳转performActionForShortcutItem

#pragma mark - 3D Touch
//如果APP没被杀死,还存在后台,点开Touch会调用该代理方法
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {if (shortcutItem) {//判断设置的快捷选项标签唯一标识,根据不同标识执行不同操作[[SD3DTouchManager sharedInstance] apply3DTouch:shortcutItem];}if (completionHandler) {completionHandler(YES);}
}

四、小结

iOS开发-实现3DTouch按压App快捷选项shortcutItems及跳转功能

App的应用图标通过3D Touch按压App图标,会显示快捷选项,点击选项可快速进入到App的特定页面。

学习记录,每天不停进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/16918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES6的语法兼容IE浏览器

案例1 zdsxData.zdsxData.forEach(el>{let str <tr> <td><a href${el.url} target"_blank"><font color"#79EEFF">${el.sxms}</font></a></td> <td>${el.gjjd}</td> <td>${el.zrr}<…

性能压力测试的重要性与实施方法

性能压力测试是在软件开发过程中评估系统在不同负载条件下的表现和稳定性的关键步骤。这种测试是为了确定系统在正常和峰值负载下的性能表现&#xff0c;以验证系统是否能够满足用户需求&#xff0c;同时发现潜在的性能问题并加以解决。 首先&#xff0c;性能压力测试对于确保系…

Linux端口与netstat使用

端口是设备与外界交流的通道&#xff0c;有物理端口和虚拟端口。 Linux有六万多端口&#xff0c;可以分为下面几类&#xff1a; 1.公认端口&#xff08;1~1023&#xff09;&#xff1a;用于系统内置与知名程序的预留使用 2.注册端口&#xff08;1024~49151&#xff09;&…

Games虚拟现实人本计算研究

晚上八点(北京时间)的 GAMES Webinar 《VR/AR专题》第二期即将开始&#xff01;&#x1f525;&#x1f525;&#x1f525; &#x1f4dc;本期主题&#xff1a;VR人本计算及交互 &#x1f468;&#x1f3fb;‍&#x1f3eb;嘉宾1&#xff1a;北京大学的李胜老师 &#x1f468;…

用python编写一个小程序,如何用python编写软件

大家好&#xff0c;给大家分享一下用python编写一个小程序&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1、python可以写手机应用程序吗&#xff1f; 我想有人曲解意思了&#xff0c;人家说用python开发渣蔽一个手机app&#xff0c;不是…

面对洪水困境,如何利用Python编写天气预报程序?

目录 引言&#xff1a;步骤一&#xff1a;安装必要的库步骤二&#xff1a;注册天气API步骤三&#xff1a;编写Python代码首先&#xff0c;导入所需库&#xff1a;接着&#xff0c;定义一个函数来获取天气数据&#xff1a;最后&#xff0c;调用该函数并打印出天气预报&#xff1…

vue项目vue组件和iframe通信

vue项目iframe通信 父组件传入iframe参数&#xff0c;并接受iframe数据 <template><div><a-button type"primary" click"sendPostMessage" icon"search">查询</a-button><iframe ref"iframe" style"h…

让SpringBoot不需要Controller、Service、DAO、Mapper,卧槽!这款工具绝了!

Dataway介绍 Dataway 是基于 DataQL 服务聚合能力&#xff0c;为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应…

要彻底学好C++,学习建议

如果你已经掌握了C的基本语法&#xff01;要彻底学好C&#xff0c;以下是一些建议的步骤&#xff1a; 深入学习C核心概念&#xff1a; 理解面向对象编程&#xff08;OOP&#xff09;的概念&#xff0c;学习类、对象、继承、封装和多态等。掌握C中的数据类型、变量、运算符、条件…

CNN、数据预处理、模型保存

目录 CNN代码读取数据搭建CNN训练网络模型 数据增强迁移学习图像识别策略数据读取定义数据预处理操作冻结resnet18的函数把模型输出层改成自己的设置哪些层需要训练设置优化器和损失函数训练开始训练再训练所有层关机了&#xff0c;再开机&#xff0c;加载训练好的模型 CNN 代码…

如何快速用Go获取短信验证码

要用Go获取短信验证码&#xff0c;通常需要连接到一个短信服务提供商的API&#xff0c;并通过该API发送请求来获取验证码。由于不同的短信服务提供商可能具有不同的API和授权方式&#xff0c;我将以一个简单的示例介绍如何使用Go语言来获取短信验证码。 在这个示例中&#xff0…

Flutter中Dart语言常用知识

目录 1. 变量和数据类型2. 函数3. 类4. 异常处理5. 泛型6. 变量声明和类型推断&#xff1a;7. 函数定义&#xff1a;8. 类定义和实例化&#xff1a;9. 接口定义&#xff1a;10. 抽象类定义&#xff1a;11. 混合类型列表&#xff1a;12. Flutter 中的 UI 组件&#xff1a;13.Dar…

【ARM Coresight 系列文章 2.4 - Coresight 寄存器:DEVARCH,DEVID, DEVTYPE】

文章目录 1.1 DEVARCH(device architecture register)1.2 DEVID(Device configuration Register)1.3 DEVTYPE(Device Type Identifier Register) 1.1 DEVARCH(device architecture register) DEVARCH 寄存器标识了coresight 组件的架构信息。 bits[31:21] 定义了组件架构&…

深入了解Unity的Input类:一份详细的技术指南(六)

前言 在Unity开发中&#xff0c;我们通常需要获取并处理用户的输入&#xff0c;这时我们就需要用到Unity的Input类。它允许我们通过键盘&#xff0c;鼠标&#xff0c;触摸屏&#xff0c;游戏手柄等多种方式从用户那里接收输入。在本篇文章中&#xff0c;我会用一万字以上深度解…

力扣简单1道_两数之和

两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。你可以按任意顺序…

微信小程序开发学习之--地图绘制行政区域图

不知道大家有没有感觉就是在做微信小程序地图功能时刚刚接触时候真的感觉好迷茫呀&#xff0c;文档看不懂&#xff0c;资料找不到&#xff0c;就很难受呀&#xff0c;比如我现在的功能就想想绘制出一个区域的轮廓图&#xff0c;主要是为了显眼&#xff0c;效果图如下&#xff1…

一些学习资源

AI 00 前言 - AI-EDU|openAI 趣味编程 Coding Games and Programming Challenges to Code Better UI设计 创造狮 创意工作者导航 Java Java 技术书籍大全 GitHub - fenixsoft/jvm_book: 《深入理解Java虚拟机&#xff08;第3版&#xff09;》样例代码&勘误 OpenJDK …

【入门SpringCloud(一)】什么是SpringCloud?

一、概述 集群&#xff08;Cluster&#xff09;&#xff1a;同一种软件服务的多个服务节点共同为系统提供服务过程&#xff0c;称之为该软件服务集群。 分布式&#xff08;Distribute&#xff09;&#xff1a;分布式是一种系统架构&#xff0c;是将系统中的不同组件分布在不同…

Mac 安装配置adb命令环境(详细步骤)

一、注意&#xff1a;前提要安装java环境。 因为android sdk里边开发的一些包都是依赖java语言的&#xff0c;所以&#xff0c;首先要确保已经配置了java环境。 二、在Mac下配置android adb命令环境&#xff0c;配置方式如下&#xff1a; 1、下载并安装IDE &#xff08;andr…

springboot + (mysql/pgsql) + jpa 多数据源(不同类数据源)

配置文件&#xff1a; spring:datasource:primary:jdbc-url: jdbc:mysql://host:3306/数据库?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&failOverReadOnlyfalse&serverTimezoneAsia/Shanghai&zeroDateTimeBehaviorconvertToNullusername…