【问题标题】:Image View to Full Screen - Zoom needed图像视图全屏 - 需要缩放
【发布时间】:2018-10-29 10:32:06
【问题描述】:

您好,我正在写这个问题,因为我想在全屏图像上添加缩放(捏合手势)。我所做的是使用我在这里找到的一些功能,但我从未找到添加缩放手势(捏)的方法。基本上我在我的 ViewController 中有一个图像(@IBOutlet weak var fotografiaContactoGenerales: UIImageView!),我应用了以下代码:

在 viewDidLoad() 内的视图控制器上:

    // add TAP Recognizer
    let singleTap = UITapGestureRecognizer(target: self, action: #selector(ViewControllerGenerales.tapDetected))
    singleTap.numberOfTapsRequired = 1 // you can change this value
    fotografiaContactoGenerales.isUserInteractionEnabled = true
    fotografiaContactoGenerales.addGestureRecognizer(singleTap)

外部 viewDidLoad()

@objc func tapDetected() {
    let imageView = fotografiaContactoGenerales!
    let newImageView = UIImageView(image: imageView.image)
    newImageView.frame = UIScreen.main.bounds
    newImageView.backgroundColor = .white
    newImageView.contentMode = .scaleAspectFit
    newImageView.isUserInteractionEnabled = true

    // Set Tap Recognizer
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    newImageView.addGestureRecognizer(tap)

    self.view.addSubview(newImageView)
    self.navigationController?.isNavigationBarHidden = true
    self.tabBarController?.tabBar.isHidden = true
}

@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
    self.navigationController?.isNavigationBarHidden = false
    self.tabBarController?.tabBar.isHidden = false
    sender.view?.removeFromSuperview()
}

此时我的应用程序可以全屏显示图片,但我不知道如何应用例程或某些代码来允许用户在显示的图像上应用捏缩放。

您能帮我添加到上面的代码以允许缩放捏合手势吗?

提前谢谢你。

【问题讨论】:

  • 你尝试过使用 UIDocumentInteractonController 吗? "developer.apple.com/documentation/uikit/…" 这应该免费给你们,只要 sdk 支持它:)
  • 明白了,但是,您认为缩放捏合可以应用于上述例程吗?

标签: swift image zooming fullscreen pinch


【解决方案1】:

谢谢,我想分享这个问题的解决方案,很简单,只是我添加了一个带有捏和以下功能的新手势:)

@objc func scaleImage(_ sender: UIPinchGestureRecognizer) {
    if sender.state == .ended || sender.state == .changed {

        let currentScale = sender.view!.frame.size.width / sender.view!.bounds.size.width
        var newScale = currentScale*sender.scale

        if newScale < 1 {
            newScale = 1
        }
        if newScale > 7 {
            newScale = 7
        }

        let transform = CGAffineTransform(scaleX: newScale, y: newScale)

        self.newImageView.transform = transform
        sender.scale = 1

    }
}

我做的另一个步骤是在原始全屏功能之外移动或创建 UIIMAGE var,这对我有帮助。

现在我可以缩放图像,但现在我的问题是允许用手指 ojjojoj 移动图像

【讨论】:

  • 我也在研究如何移动放大的图像...
【解决方案2】:

我将此添加为全球出口

var headerImageWithZoom = UIImageView()

lazy var headerImageView: UIImageView = {
    let iv = UIImageView()
    iv.contentMode = .scaleAspectFill
    iv.layer.masksToBounds = true
    iv.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapHeaderImageAction)))
    iv.isUserInteractionEnabled = true
    iv.translatesAutoresizingMaskIntoConstraints = false
    return iv
}()

这些是行动:

@objc func tapHeaderImageAction(_ sender: UITapGestureRecognizer) {
    let imageView = sender.view as! UIImageView
    headerImageWithZoom = UIImageView(image: imageView.image)
    headerImageWithZoom.frame = UIScreen.main.bounds
    headerImageWithZoom.contentMode = .scaleAspectFit
    headerImageWithZoom.isUserInteractionEnabled = true
    self.navigationController?.isNavigationBarHidden = true
    self.tabBarController?.tabBar.isHidden = true
    
    
    let scrollView = UIScrollView()
    scrollView.frame = UIScreen.main.bounds
    scrollView.backgroundColor = .black
    scrollView.frame = UIScreen.main.bounds
    scrollView.maximumZoomScale = 4
    scrollView.minimumZoomScale = 1.0
    scrollView.bounces = true
    scrollView.bouncesZoom = true
    scrollView.showsHorizontalScrollIndicator = true
    scrollView.showsVerticalScrollIndicator = true
    scrollView.delegate = self
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    scrollView.addGestureRecognizer(tap)
    scrollView.addSubview(headerImageWithZoom)
    headerImageView.center = scrollView.center
    view.addSubview(scrollView)
}

@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
    self.navigationController?.isNavigationBarHidden = false
    self.tabBarController?.tabBar.isHidden = false
    sender.view?.removeFromSuperview()
}

最后这是委托函数:

extension PinnedViewViewController: UIScrollViewDelegate {
    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return headerImageWithZoom
    }
}

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 2015-12-20
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多