2017-08-15 69 views
0

我可以将3d touch添加到不在集合视图或表格视图中的单张照片吗?我似乎看到的所有内容都使用集合视图。3d触摸单张照片。 iOS,Swift

我有一张图片,显示的信息与视图,但图片是一个小广场我有它,所以我可以点击照片,它在视图控制器中打开,但我想添加偷看它。

回答

1

是的,您所需要做的就是符合UIViewControllerPreviewingDelegate。当深按是注册

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

方法将被调用。如果您返回非零视图控制器,则会启动窥视和流行音乐交互。

例如,此处为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是与占据整个视图图像视图视图控制器。

其中给出的结果是:

enter image description here

+0

谢谢你来回答复和时间在这@beyowulf ..香港专业教育学院试图实现这一点,但如何将这一看,如果我的法师被称为imagePhoto。 –

+0

'imagePhoto'是你的'UIImageView'的名字?如果'imagePhoto'是'view'的子视图,那么你可以说'if imagePhoto.frame.contains(location){//创建下一个视图控制器并传递图像} else {return nil; }' – beyowulf

+0

在具有我点击的图片照片的视图中的视图。我已经设置了一个手势,所以我可以点击它,它会去一个新的控制器,以显示图像的所有工作正常。 –