单张照片上的 3d 触摸。 iOS、Swift

3d touch on single photo. iOS, Swift

我可以将 3d touch 添加到不在 collection 视图或 table 视图中的单张照片吗?我在上面看到的所有内容都使用 collection 视图。

我有一张显示在带有信息的视图上的图片,但图片是一个小方块,我有它,所以我可以点击照片并在视图控制器中打开它,但我想添加 peek 到它。

是的,您需要做的就是遵守UIViewControllerPreviewingDelegate。注册深压时

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?

方法将被调用。如果您 return 一个非零视图控制器,将启动一个 peek 和 pop 交互。

例如,这里 ViewController 作为一个小的居中图像视图。当视图被 3D 触摸时,我们可以检查该位置是否在图像视图内。如果是这样,我们可以预览下一个视图控制器:

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
        if traitCollection.forceTouchCapability == .available
        {
            registerForPreviewing(with: self, sourceView: view)
        }
        else
        {
            print("3D Touch Not Available")
        }
    }

}

extension ViewController: UIViewControllerPreviewingDelegate
{
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?
    {
        let convertedLocation = view.convert(location, to: imagePhoto)
        if imagePhoto.bounds.contains(convertedLocation)
        {
            // Init the peek view controller, set relevant properties, and return it
            let otherViewController = self.storyboard?.instantiateViewController(withIdentifier: "\(OtherViewController.self)") as? OtherViewController
            otherViewController?.image = imageView.image
            previewingContext.sourceRect = imageView.frame
            return otherViewController
        }
        else
        {
            return nil
        }
    }

    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController)
    {
        // Present or push the view controller
        present(viewControllerToCommit, animated: true)
    }
}

其中OtherViewController是一个视图控制器,图像视图占据了整个视图。

结果为: