如何实现3D-Touch Peek-and-select?

时间:2015-09-29 10:34:03

标签: ios iphone cocoa-touch uikit 3dtouch

电话,提醒和地图使用不同的3D-Touch Peek UI,允许一次选择一个动作。例如,强行按下提醒并一次性选择“一天提醒我”,而不释放手指。它在视觉上与使用UIViewControllerPreviewing API的标准3D Touch预览不同,因为它会在左对齐文本旁边显示自定义图标。

enter image description here

我找不到使用官方API执行此操作的方法。我是否遗漏了某些内容或确实是私有API?

3 个答案:

答案 0 :(得分:3)

我也在Apple Developer Forums上提出了我的问题并收到了Apple的回复:

  

目前没有公共API可以执行这些操作。请提交bug   报告是否这是您想要在您的应用中执行的操作,并包括   您正在寻找的具体细节。

因此目前无法使用官方SDK。我提交了这个enhancement request radar,如果你需要的话我鼓励你欺骗它!

答案 1 :(得分:2)

对于未来的读者,Apple对此问题的回答是:

  

目前没有公共API可以执行这些操作。如果您希望在应用中执行此操作,请提交错误报告,并提供您希望执行的操作的具体详细信息。

来源:Apple Developer Forum

答案 2 :(得分:-1)

这些是UIPreviewActionItem

覆盖previewingContext:viewControllerForLocation:后,您还可以覆盖- (NSArray<id<UIPreviewActionItem>> *)previewActionItems,这样您就可以指定快速操作。

这是一个可以帮助你的片段:(related tutorial

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

    UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Destructive Action" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Destructive Action triggered");
    }];

    UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Selected Action" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Selected Action triggered");
    }];

    return @[action1, action2, action3];
}

Apple文档:

  

此属性用于预览(peek)视图控制器   你出现在你的实施中   previewingContext:viewControllerForLocation:delegate method ..

     

实施此方法以为此类预览提供快速操作。   当用户在预览上向上滑动时,系统会显示这些内容   预览下方工作表中的快速操作项。

     

此方法的默认实现返回一个空数组。