如何实现 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?的主要内容,如果未能解决你的问题,请参考以下文章