3D Touch Peek Swipe Like Mail

时间:2015-11-24 06:17:01

标签: ios swift2 uikit

使用3D Touch Peek和Pop功能,模仿下面描述的功能的最有效方法是什么(向左侧滑动“偷看”内容以执行操作)?以下屏幕截图来自iOS本机邮件应用程序。

Mail Swipe 3D Touch - Unread Mail Swipe 3D Touch - Trash

2 个答案:

答案 0 :(得分:9)

<强>更新

您可以在iOS 10上复制此效果。有一组称为UIPreviewInteractionUIPreviewInteractionDelegate的新API,可以为窥视/弹出交互启用自定义演示。我强烈建议从今年的WWDC观看A Peek at 3D Touch

原始答案

查看iOS Runtime Headers,有一个名为UIPreviewPresentationController的课程。那是负责 peeks 的控制器。在其中,有对称为leadingPreviewActiontrailingPreviewAction的对象的引用。它们具有处理边缘约束和中心的相应属性。通过使用术语前导尾随(如在自动布局中)来判断,这些可能对应于左/右操作项。

这是推测,但我认为这些相关的私有类(_UIPreviewQuickActionView)控制着您正在寻找的行为。那些现在不可用。

同样,UIPreviewAction的文档说:

  

当用户向上滑动时,预览操作或查看快速操作会显示在下方。窥视快速操作通常会选择指向您应用的深层链接,并具有标题,样式和处理程序。

答案 1 :(得分:2)

要使用 Peek Quick Actions ,您的detailledViewControler(或您命名的任何内容)应该覆盖previewActionItems,如下所示:

lazy var previewActions: [UIPreviewActionItem] = {
        func previewActionForTitle(title: String, style: UIPreviewActionStyle = .Default) -> UIPreviewAction {
            return UIPreviewAction(title: title, style: style) { previewAction, viewController in
                guard let detailViewController = viewController as? DetailViewController,
                          item = detailViewController.detailItemTitle else { return }

                print("\(previewAction.title) triggered from `DetailViewController` for item: \(item)")
            }
        }

        let action1 = previewActionForTitle("Default Action")
        let action2 = previewActionForTitle("Destructive Action", style: .Destructive)

        let subAction1 = previewActionForTitle("Sub Action 1")
        let subAction2 = previewActionForTitle("Sub Action 2")
        let groupedActions = UIPreviewActionGroup(title: "Sub Actions…", style: .Default, actions: [subAction1, subAction2] )

        return [action1, action2, groupedActions]
    }()


override func previewActionItems() -> [UIPreviewActionItem] {
    return previewActions
}

您可以在此处找到完整的代码:https://developer.apple.com/library/ios/samplecode/ViewControllerPreviews/ViewControllerPreviewsUsingtheUIViewControllerpreviewingAPIs.zip