3D Touch的基本使用
来源:互联网 发布:安卓个人中心界面源码 编辑:程序博客网 时间:2024/05/23 18:30
3D Touch主要的使用场景为两个,一个静态这设置,一个动态添加,还有包括修改UIApplicationShortcutItem,peek(预览)和pop(跳转)的实现。
应用最多添加4个快捷选项标签,iOS给我们提供了2种方式开发。
一、静态的标签实现
打开项目的plist文件,添加如下项(需要我们手工添加)
或者代码编写plist
<key>UIApplicationShortcutItems</key> <array> <dict> <key>UIApplicationShortcutItemIconFile</key> <string>open-favorites</string> <key>UIApplicationShortcutItemTitle</key> <string>Favorites</string> <key>UIApplicationShortcutItemType</key> <string>com.mycompany.myapp.openfavorites</string> <key>UIApplicationShortcutItemUserInfo</key> <dict> <key>key1</key> <string>value1</string> </dict> </dict> <dict> <key>UIApplicationShortcutItemIconType</key> <string>UIApplicationShortcutIconTypeCompose</string> <key>UIApplicationShortcutItemTitle</key> <string>New Message</string> <key>UIApplicationShortcutItemType</key> <string>com.mycompany.myapp.newmessage</string> <key>UIApplicationShortcutItemUserInfo</key> <dict> <key>key2</key> <string>value2</string> </dict> </dict> </array>
UIApplicationShortcutItems:数组中的元素就是我们的那些快捷选项标签。
UIApplicationShortcutItemTitle:标签标题(必填)
UIApplicationShortcutItemType:标签的唯一标识(必填)
UIApplicationShortcutItemIconType:使用系统图标的类型,如搜索、定位、home等(可选)
UIApplicationShortcutItemIconFile:使用项目中的图片作为标签图标(可选)
UIApplicationShortcutItemSubtitle:标签副标题(可选)
UIApplicationShortcutItemUserInfo:字典信息,如传值使用(可选)
二、动态标签的实现
1、在AppDelegate.m文件中加如下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. UINavigationController *Nav = [[UINavigationController alloc] initWithRootViewController:[[TestOneViewController alloc] init]]; self.window.rootViewController = Nav; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; //设置3D Touch 标签 NSMutableArray *arrShortcutItem = (NSMutableArray *)[UIApplication sharedApplication].shortcutItems; //icon 快捷按钮的图标 可以自定义 //创建系统风格的icon // UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare]; //创建自定义图标的icon // UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"分享.png"]; UIApplicationShortcutItem *shoreItem1 = [[UIApplicationShortcutItem alloc] initWithType:@"cn.damon.DM3DTouchDemo.openSeach" localizedTitle:@"搜索" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch] userInfo:nil]; [arrShortcutItem addObject:shoreItem1]; UIApplicationShortcutItem *shoreItem2 = [[UIApplicationShortcutItem alloc] initWithType:@"cn.damon.DM3DTouchDemo.openCompose" localizedTitle:@"新消息" localizedSubtitle:@"新消息副标题" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose] userInfo:nil]; [arrShortcutItem addObject:shoreItem2]; [UIApplication sharedApplication].shortcutItems = arrShortcutItem; return YES;}
效果图:
2、点击快捷键标签进入对应的响应
在AppDelegate.m中加入代码:
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{ //这里可以获的shortcutItem对象的唯一标识符 //不管APP在后台还是进程被杀死,只要通过主屏快捷操作进来的,都会调用这个方法 NSLog(@"name:%@\ntype:%@", shortcutItem.localizedTitle, shortcutItem.type); UINavigationController *Nav = [[UINavigationController alloc] initWithRootViewController:[[TestOneViewController alloc] init]]; self.window.rootViewController = Nav; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; //判断跳转界面 if ([shortcutItem.type isEqualToString: @"cn.damon.DM3DTouchDemo.openCompose"]) { TestTowViewController *TwoVC = [[TestTowViewController alloc] init]; [Nav pushViewController:TwoVC animated:YES]; }else if ([shortcutItem.type isEqualToString: @"cn.damon.DM3DTouchDemo.openSeach"]){ SeachViewController *VC = [[SeachViewController alloc] init]; [Nav pushViewController:VC animated:YES]; }else if ([shortcutItem.type isEqualToString: @"com.mycompany.myapp.openfavorites"]){ SeachViewController *VC = [[SeachViewController alloc] init]; [Nav pushViewController:VC animated:YES]; } if (completionHandler) { completionHandler(YES); } /* 也可以在这里面修改UIApplicationShortcutItem */}
3、peek ( 预览 ) 和pop(跳转到预览的界面)
首先注册peer和pop功能,以我的代码为例,想点击TestOneViewController中的cell,预览TestTwoViewController界面,然后跳转到TestTwoViewController界面,那就先在TestOneViewController里面注册,并继承协议UIViewControllerPreviewingDelegate
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSArray *arr = @[@"test1",@"test2"]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID" forIndexPath:indexPath]; cell.textLabel.text = arr[indexPath.row]; //注册3D Touch /** 从iOS9开始,我们可以通过这个类来判断运行程序对应的设备是否支持3D Touch功能。 UIForceTouchCapabilityUnknown = 0, //未知 UIForceTouchCapabilityUnavailable = 1, //不可用 UIForceTouchCapabilityAvailable = 2 //可用 */ if ([self respondsToSelector:@selector(traitCollection)]) { if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)]) { if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) { [self registerForPreviewingWithDelegate:(id)self sourceView:cell]; } } } return cell;}
然后实现UIViewControllerPreviewingDelegate方法:
#pragma mark - 3D Touch代理 UIViewControllerPreviewingDelegate//预览图- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{ NSArray *arr = @[@"1",@"2"]; NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[previewingContext sourceView]]; //创建要预览的控制器 TestTowViewController *TwoVC = [[TestTowViewController alloc] init]; TwoVC.InfoStr = arr[indexPath.row]; TwoVC.index = indexPath.row; //指定当前上下文视图Rect CGRect rect = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 300); previewingContext.sourceRect = rect; return TwoVC;}//从预览图跳转进入TestTwo 控制器//(用力按压 跳转)- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{ [self showViewController:viewControllerToCommit sender:self];}
预览界面的设置和向上拖拽预览图生成快捷键的代码需要在TestTowViewController.m里面设置:
//3D Touch 预览图时 向上拖拽得到的快捷功能菜单- (NSArray<id<UIPreviewActionItem>> *)previewActionItems{ NSMutableArray *arrItem = [NSMutableArray new]; UIPreviewAction *previewAction0 = [UIPreviewAction actionWithTitle:@"取消" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { // NSLog(@"didClickCancel"); }]; UIPreviewAction *previewAction1 = [UIPreviewAction actionWithTitle:@"替换元素" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { // NSLog(@"替换元素"); }]; [arrItem addObjectsFromArray:@[previewAction0,previewAction1]]; return arrItem;}
效果图如下:
这就是基本的 3D Touch的运用。
源码:https://github.com/Jadekirin/3D-TouchTest.git。
- 3D Touch的基本使用
- iOS开发--3D Touch的基本使用
- 3D touch的使用
- 3d Touch基本应用
- iOS开发3D Touch基本开发与使用
- IOS 3D touch的使用
- ios 3D Touch 的使用
- 3D Touch 使用心得(仿微信3D Touch)
- iOS开发 3D Touch的简单使用
- iOS 3D Touch开发tableview页面内的使用
- 在Tamarin中 3D Touch 的使用
- 3D Touch 的实现:
- iOS9的3D Touch
- 游戏开发者如何使用3D Touch
- 在iPhone上使用3D Touch
- 在iPhone上使用3D Touch
- 模拟器使用3D Touch功能
- iOS开发 3D-touch使用
- HashMap的面试解析
- redis集群部署
- 1-5、数据结构——map
- 设置Linux系统欢迎语
- 从ASCII聊起
- 3D Touch的基本使用
- JavaScript 数据结构(一): 链表
- JS 获取7天前的日期YYYY-MM-DD
- Android数据存储之Android 6.0运行时权限下文件存储的思考
- MQTT服务+客户端
- flume-02-flume案例集锦
- jQuery学习笔记之$(document).ready()
- vc++ 2015 RC x64在windows2008安装时提示没有权限的解决
- 哆啦宝