单张照片上的 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
是一个视图控制器,图像视图占据了整个视图。
结果为:
我可以将 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
是一个视图控制器,图像视图占据了整个视图。
结果为: