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。

原创粉丝点击