初识3D Touch
3D Touch
概述:
从.Net转来也快有半年之多了,从小生到现在也算是经历了无所bug了,不过还是打到不了Ios在我心目中的地位!!!
一、前言
在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch,其原理上是增加了一个压力的感触,通过区分轻按和重按来进行不同的用户交互。但是对于开发人员来说我们确实遇到了一个难题:xcode7是支持3D Touch开发的,可是模拟器并不支持这个手势
不过还好的是,在我们码农界的大神们开发了一个对于此bug的插件,那就是SBShortcutMenuSimulator
二、主题
好了,我们废话不多说先看看我们项目的预期样子吧!
之所以是用这个项目来测试,是因为以前在自学的时候,这是人生中的第一个Ios项目,经久不忘啊!
源代码:https://github.com/LitterL/Litter_Lottery
三、开撸
1、开撸之前我们来看两个方法:
1 2 3 4 | //程序的入口 - ( BOOL )application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launchOptions { return YES ; } |
这一个方法为程序的入口也就是初始化窗口的地方,然而也是我们初始化3D Touchview按钮显示在地方
1 2 3 4 | //3D Touch响应事件 -( void )application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:( void (^)( BOOL ))completionHandler { } |
这一个方法为3D Touch响应事件也就是我在桌面使用捷径3D Touch选择某一处view按钮的时候会调用得事件
2、了解上面两个方法之后我们就开始正式的撸代码了,首先我们想要加载3D Touch按钮,那么我们就可以在程序的入口的方法中给UIApplication一个shortcutItems的属性赋值,其实这个属性也就是存放在3D Touch显示的每一个view按钮的集合,而它里面放着的就是UIApplicationShortcutItem
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | - ( BOOL )application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launchOptions { // UIApplicationShortcutIcon为创建显示的图片的类 // 创建图片一共有两种方式 一种使用系统的图片 一种使用自定义的图片 // iconWithType:这个类方法为系统方法 // iconWithTemplateImageName:这个为自己创建的方法 UIApplicationShortcutIcon *icon0 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose ]; // initWithType:用作以后响应的时候判断 // localizedTitle:在3DTouch中显示的文字 // localizedSubtitle:子标题 // icon:图片 // userInfo:传入的其余信息 UIApplicationShortcutItem *item0 =[[UIApplicationShortcutItem alloc]initWithType:@ "hall" localizedTitle:@ "购彩大厅" localizedSubtitle: nil icon:icon0 userInfo: nil ]; UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd ]; UIApplicationShortcutItem *item1 =[[UIApplicationShortcutItem alloc]initWithType:@ "are" localizedTitle:@ "竞技场" localizedSubtitle: nil icon:icon1 userInfo: nil ]; UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch ]; UIApplicationShortcutItem *item2 =[[UIApplicationShortcutItem alloc]initWithType:@ "his" localizedTitle:@ "开奖信息" localizedSubtitle: nil icon:icon2 userInfo: nil ]; UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay]; UIApplicationShortcutItem *item3 =[[UIApplicationShortcutItem alloc]initWithType:@ "mylottery" localizedTitle:@ "我的彩票" localizedSubtitle: nil icon:icon3 userInfo: nil ]; //添加shortcutItems application.shortcutItems= @[item0,item1,item2,item3]; return YES ; } |
3、UIApplicationShortcutIcon 为创建显示的图片的类
创建图片一共有两种方式 :
1、一种使用系统的图片
+ (instancetype)iconWithType:(UIApplicationShortcutIconType)type;
其中UIApplicationShortcutIconType中有默认的这几个
UIApplicationShortcutIconTypeCompose,
//编辑的图标
UIApplicationShortcutIconTypePlay,
//播放图标
UIApplicationShortcutIconTypePause,
//暂停图标
UIApplicationShortcutIconTypeAdd,
//添加图标
UIApplicationShortcutIconTypeLocation,
//定位图标
UIApplicationShortcutIconTypeSearch,
//搜索图标
UIApplicationShortcutIconTypeShare
//分享图标
2、一种使用自定义的图片
+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;
4、UIApplicationShortcutItem 为创建显示view里面包含图片以及文字
1、创建也有两种方式 第一种
因为很长这里简写了 :
initWithType:@"are" localizedTitle:@"竞技场" localizedSubtitle:nil icon:icon1 userInfo:nil
initWithType:用作以后响应的时候判断
localizedTitle:在3DTouch中显示的文字
localizedSubtitle:子标题
icon:图片
userInfo:传入的其余信息
1、创建也有两种方式 第二种
initWithType:用作以后响应的时候判断
localizedTitle:在3DTouch中显示的文字
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle;
只要完成上述情况 那么你应该能看到这张图片了
5、那么在最后我们来完成如何响应事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -( void )application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:( void (^)( BOOL ))completionHandler { //为显示第几页数据 int i=0; if ([shortcutItem.type isEqualToString:@ "hall" ]) { i=0; } else if ([shortcutItem.type isEqualToString:@ "are" ]) { i=1; } else if ([shortcutItem.type isEqualToString:@ "his" ]) { i=3; } else if ([shortcutItem.type isEqualToString:@ "mylottery" ]) { i=4; } // 不管我点击的是谁 我都调用TabBar 只不过我传入了索引 LitterLTabBarController *tabBar = [LitterLTabBarController TabBarSelectIndex:i]; //最后把控制器设置为根控制器 self .window.rootViewController = tabBar; } |
在我的项目中它根控制器为UITabBarController控制器,再加上我在先前创建3D Touch的时候传入过initWithType,所以当我在外部使用3D Touch快速进入的时候,通过他的initWithType判断我的索引,前提我自己是知道它的索引的,在之后我把传入的索引作为UITabBarController的selectedIndex也就是开始展示的控制器,那么我们的整个就算是完事了
本章到此结束
欢迎各位码友随意转载并指正 😊😊😊
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~