如何实现3D-Touch的Peek和Select功能?

9

电话、提醒事项和地图使用不同的3D-Touch Peek UI,可以一次选择一个操作。例如,对提醒事项进行强制按压,并在一次操作中选择“在某天提醒我”,而无需松开手指。它在视觉上也与使用UIViewControllerPreviewing API的标准3D Touch预览有所不同,因为它显示了左对齐文本旁边的自定义图标。

输入图片说明

我找不到使用官方API实现此功能的方法。我错过了什么还是确实是私有API?


请考虑将我的答案标记为正确,以确保人们快速找到相关来源。谢谢! - julien_c
3个回答

3
我也在Apple Developer论坛上发了我的问题,并从苹果收到了以下回复:

目前没有公共API可以做这些事情。如果您想在应用程序中执行此操作,请提交错误报告,并包含您要执行的具体细节。

因此,使用官方SDK目前不可能。我提交了这个增强请求雷达,如果您也需要此功能,请重复提交!

2

对于未来的读者们,苹果公司对这个问题的回答是:

目前还没有公开的API可以做到这些事情。如果您想在您的应用程序中实现此功能,请提交错误报告,并提供具体细节。

来源:苹果开发者论坛


-1

这些是UIPreviewActionItem

在重写previewingContext:viewControllerForLocation:之后,您还可以重写- (NSArray<id<UIPreviewActionItem>> *)previewActionItems,这将允许您指定快速操作。

这里有一段代码片段可以帮助您:(相关教程)

- (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: 代理方法的实现中呈现。

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

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


1
请仔细阅读问题。我不是指标准的 Peek-and-Pop 预览,而是指所提到的应用程序中的特殊预览。标准预览不允许你在释放手指之前选择操作。 - Ortwin Gentz
你会如何使用它来撰写邮件?在我的预览控制器中,我有一个标准的displayComposerSheet方法,但是当我告诉操作执行该方法时,该撰写器从未显示过,因为该方法告诉它在该预览中启动,而预览已经不存在了。 - user717452

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接