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

Posted

技术标签:

【中文标题】如何实现 3D-Touch Peek-and-select?【英文标题】:How to implement 3D-Touch Peek-and-select? 【发布时间】:2015-09-29 10:34:02 【问题描述】:

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

我找不到使用官方 API 的方法。我错过了什么还是这确实是一个私有 API?

【问题讨论】:

请考虑将我的答案标记为正确,以确保人们快速找到相关来源。谢谢! 【参考方案1】:

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

目前没有公共 API 来做这些事情。请提交错误 报告这是否是您想在应用程序中执行的操作,并包括 您要做什么的具体细节。

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

【讨论】:

【参考方案2】:

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

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

来源:Apple Developer Forum

【讨论】:

【参考方案3】:

那些是UIPreviewActionItem

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

这里有一个可以帮助你的 sn-p:(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: 委托方法..

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

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

【讨论】:

请仔细阅读问题。我指的不是标准的 Peek-and-Pop 预览,而是提到的应用程序中的特殊预览。标准预览不允许您在不松开手指的情况下选择动作。 你将如何使用它来撰写邮件?我的预览控制器中有一个标准的 displayComposerSheet 方法,但是当我告诉操作这样做时,作曲家永远不会显示,因为该方法告诉它在该预览中启动,并且预览不再存在。

以上是关于如何实现 3D-Touch Peek-and-select?的主要内容,如果未能解决你的问题,请参考以下文章

移动记账-作品展示(视频,截图)

iOS 3DTouch功能

一个字就能让iPhoneiPad瞬间崩溃

进阶实现页面静态化,PHP是如何实现的,你又是如何实现的

请问SQL如何实现批量查询

如何快速自己实现Map