3D-touch

作者: 明月钓无痕 | 来源:发表于2016-08-18 14:27 被阅读54次

苹果在6s 中引入的心的功能.虽然有点鸡肋的感觉.但还是要看一下.

1. Home Screen Quick Actions

如图中所示,当按压图标时出现菜单列表



1). 在启动应用*- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions *后我们添加需要弹出的列表项

- (void)creatShortcutItems {
    // 创建 icon
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"money"];
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"gouwuche"];
    
    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"m" localizedTitle:@"钱包" localizedSubtitle:@"这里是钱包" icon: icon1 userInfo:nil];
    UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"g" localizedTitle:@"购物车" localizedSubtitle:@"这里是购物车" icon: icon2 userInfo:nil];
    
    [UIApplication sharedApplication].shortcutItems = @[item1, item2];
}

注意:最多只能添加4项,至于图标在左或者在右显示,取决于 app 的位置.

2)实现代理方法处理3d-touch事件

// 处理3dtouch 事件
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
    NSLog(@"%@", shortcutItem);
    if ([shortcutItem.type isEqualToString:@"m"]) {
    /*
        if ([application.keyWindow.rootViewController isKindOfClass:[DZTestTouchViewController class]]) {
            [self.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
        }
    */
        DZTestTouchViewController *vc = [[DZTestTouchViewController alloc] init];
        [self.window.rootViewController presentViewController:vc animated:YES completion:^{
            NSLog(@"推出了钱包");
        }];
    } else {
        NSLog(@"推出了购物车");
    }
}

Peek and Pop

根据官方文档说明,用户使用3d touch 进行交互时,有三个阶段
(1)提示用户有交互



(2)继续按压,会出现预览视图


(3)通过视图上的交互控件交互

(1)注册3d touch

// 界面将要发生变化的时候调用
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
    [self check3DTouch];
}

- (void)check3DTouch {
    // 判断是否支持3dtouch
    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
        // 注册代理
        // 如果是使用的 imageView, 一定要记得先设置可以交互.
        [self registerForPreviewingWithDelegate:self sourceView:self.touchBtn];
    }
}

(2)实现代理方法

// 返回一个预览的 VC
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
    if ([self.presentedViewController isKindOfClass:[DZTestPeekViewController class]]) {
        return nil;
    }    
    DZTestPeekViewController *vc = [[DZTestPeekViewController alloc] init];
    return vc;
}

// 最终展示的 vc, 当出现预览的 Vc 后继续按压展示的 VC, 可以和 预览的 VC 用一个控制器
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
    DZTestPopViewController *vc = [[DZTestPopViewController alloc] init];
    [self showViewController:vc sender:self];
}

(3)预览 vc 的交互事件

- (NSArray<id<UIPreviewActionItem>> *)previewActionItems {
    UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"action1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"点击事件1");
    }];
    
    UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"action2" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"点击事件2");
    }];

// 当然事件多的话也能添加分组
//    UIPreviewActionGroup *group = [UIPreviewActionGroup actionGroupWithTitle:@"分组一" style:UIPreviewActionStyleDefault actions:@[action1, action2]];
//    return @[group];
    return @[action1, action2];
}

相关文章

  • iOS开发/两种简单实现3dTouch的方法

    iPhone用力长按触发3D-Touch效果,如下: 实现3D-Touch效果方法有两种: 一、在.plist文件...

  • 3D-Touch 简单的Demo

    最近研究了一下3D-Touch,实现了两种3D-Touch的效果.写了一个简单的Demo. 第一种 : 在icon...

  • 3D-Touch

    //先判断是否支持3D-Touch [self registPreview]; //图标可多写 UIApplica...

  • 3D-touch

    http://blog.csdn.net/showhilllee/article/details/48376073...

  • 3D-touch

    苹果在6s 中引入的心的功能.虽然有点鸡肋的感觉.但还是要看一下. 1. Home Screen Quick Ac...

  • 3D-Touch

    现在一些主流的APP都包含3Dtouch的功能,我们当然也不能落下,下面向大家推荐一个3Dtouch的De...

  • 3D-touch API - Home Screen Quick

    3D-touch目前有两种主要的使用方式 Home Screen Quick Actions 应用图标的快捷按钮 ...

  • 3D-touch API - Peek and Pop

    3D-touch目前有两种主要的使用方式 Home Screen Quick Actions 应用图标的快捷按钮 ...

  • iOS10通知使用/3D-Touch使用

    iOS10通知使用/3D-Touch使用 概序: 主要实现iOS10中 UserNotifications 对带选...

  • 关于UIPreviewAction字体颜色的黑魔法

    **** 在用到3D-Touch的时候,想到了UIPreviewAction随性就写了一下,但是看到字体的颜色不能...

网友评论

    本文标题:3D-touch

    本文链接:https://www.haomeiwen.com/subject/jzlvsttx.html