3d 触摸单张照片。iOS,斯威夫特

Ton*_*itt 1 ios 3dtouch

我可以向不在集合视图或表格视图中的单张照片添加 3d 触控吗?我似乎在它上面看到的一切都使用了集合视图。

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

bey*_*ulf 5

是的,您需要做的就是符合UIViewControllerPreviewingDelegate. 当一个深压被注册时

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?
Run Code Online (Sandbox Code Playgroud)

方法将被调用。如果您返回一个非 nil 视图控制器,将启动一个 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

OtherViewController具有占据整个视图的图像视图的视图控制器在哪里。

这给出了以下结果:

在此处输入图片说明