如何全屏显示图像并通过类似于Apple Photos的滑动消除

时间:2019-02-05 23:14:36

标签: ios swift uiimageview uiimage

如何实现Apple Photos的全屏图像和关闭图像功能?另外,如何获得图像的宽高比以适合全屏视图?他们会将UIImage发送到新的视图控制器吗?

我目前全屏显示图像的方法只是将UINavigationBar和UITabBar的Alpha设置为0,而将UIImageView的框架设置为与超级视图的框架相等。为了消除这种情况,我添加了一个点击手势识别器,可以反转Alpha并删除UIImageView从superview。

这是我的全屏显示并关闭代码

func fullscreen(forImage image: UIImage) {
    let imageView = UIImageView(image: image)
    imageView.frame = self.view.frame
    imageView.backgroundColor = .black
    imageView.contentMode = .scaleAspectFill
    imageView.clipsToBounds = true
    imageView.isUserInteractionEnabled = true

    self.navigationController?.navigationBar.alpha = 0
    self.tabBarController?.tabBar.alpha = 0

    let dismissTap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    imageView.addGestureRecognizer(dismissTap)

    self.view.addSubview(imageView)
}

@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
    sender.view?.removeFromSuperview()
    self.navigationController?.navigationBar.alpha = 1
    self.tabBarController?.tabBar.alpha = 1
}

1 个答案:

答案 0 :(得分:1)

这可以使用Apple的QuickLook框架轻松实现,因为它适用于许多扩展名和图像集合。

编辑:您想要的大多数功能都内置在QLPreviewController

let previewController = QLPreviewController()
previewController.dataSource = self
self.present(previewController, animated: true, completion: nil)

数据源是符合QLPreviewControllerDataSource协议的任何类

Here是Apple提供的有关如何轻松实现此目标的视频指南

编辑:这部分进入previewItemAt函数

guard let url = Bundle.main.url(forResource: "imageName", withExtension: "jpg")
     else {
        fatalError("Could not load imageName.jpg")
     }

return url as QLPreviewItem