ios - 是否可以在不使用 peek 的情况下添加 3D-touch?

标签 ios swift 3dtouch

我有一组可以切换的 View (按钮)。它们用作过滤器。假设这是一个公共(public)交通应用程序,你会遇到“你想乘坐哪种交通工具旅行?”的问题,你会得到三个选项:“公共(public)汽车”、“渡轮”和“火车”。您可以单击它们中的每一个以禁用或启用它们。

我想实现对其中一个按钮进行 3D 触摸的功能,这会将特定按钮切换为 on,并将所有其他按钮切换为 off

我在应用程序中的几个地方使用了 3D 触摸,但总是使用 peek/pop。我正在努力添加 3D 触摸,而无需在 previewingContext 函数中返回 UIViewController。是否可以在 3D 触摸时简单地执行一个 Action ?

可以previewingContext(::) -> UIViewController? 中执行我的操作,但我不想返回一个 UIViewController 以供查看。如果我返回 nil,那么我不会得到 taptic(?) 反馈。一旦用户“可能”用力触摸,这个函数就会在实际按下之前调用。

最佳答案

事实证明,3D 触摸(或强制触摸或其他名称)并非通过UIViewControllerPreviewingDelegate 的实现可用。该委托(delegate)的工作是决定用 peek/pop 呈现什么,而 peek 和 pop 的核心功能可以通过普通的 UIGestureRecognizer 访问。我关注了this创建我自己的 ForceGestureRecognizer 的指南,但决定继承 UILongPressGestureRecognizer 而不是 UIGestureRecognizer (将其与现有功能结合)。 该指南以及 this (使用 UINotificationFeedbackGenerator 创建轻微的震动反馈),再加上一些 CGAffineTransform - 基于触摸力的变化确实使它变得完美。

关于ios - 是否可以在不使用 peek 的情况下添加 3D-touch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580935/

相关文章:

ios - 如何防止 UITableView 向下滚动?

ios - UITableView 没有被 UIView 正确覆盖

swift - 如何构建用于拖放拼图 block 的对齐网格功能?

ios - UISearchBar : searchBarSearchButtonClicked delegate is not called

ios - 缺少 View Controller

ios - UINavigationBar 中的 UILabel 在横向中被切断

ios - 3dtouch to present(peek without pop) UIView like contacts app

objective-c - Peek & Pop - Pop 导致 UICollectionView 中的错误单元格

ios - 如何在我的 iOS 9 应用程序中为静态 UIApplicationShortcutItem 指定自定义图标?

iphone - 在 UIAlertView 中添加三个按钮