【问题标题】:Can't zoom an image in UIScrollView无法在 UIScrollView 中缩放图像
【发布时间】:2017-08-14 11:51:52
【问题描述】:

我已经坚持了好几个小时了。我想要的只是 ScrollView 中的 ImageView。我希望将 contentMode 设置为方面填充,以便图像每次都填充 ImageView。我还希望用户能够缩放和平移图像。这是我的代码:

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

var scrollView: UIScrollView!
var imageView: UIImageView!

override func viewDidLoad() {

    super.viewDidLoad()

    let image = UIImage(named: "fish")!

    imageView = UIImageView(image: image)
    imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size)
    imageView.contentMode = .scaleAspectFill

    scrollView = UIScrollView(frame: view.bounds)
    scrollView.backgroundColor = UIColor.black
    scrollView.contentSize = imageView.bounds.size

    scrollView.delegate = self

    scrollView.minimumZoomScale = 0.1
    scrollView.maximumZoomScale = 4.0
    scrollView.zoomScale = 1.0

    scrollView.addSubview(imageView)
    view.addSubview(scrollView)

}

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
    return imageView
}

}

首先我无法放大或缩小,不明白为什么。我设置了 delegate,实施了 viewForZoomingInScrollView 并设置了 ma​​ximumZoomScale 从我读到的缩放工作所需的内容。

其次,图像不适合屏幕。内容模式设置似乎没有任何影响,因为当我将其设置为 .scaleToFill 时,图像不会被挤压到屏幕中,我可以平移它。

图片小于屏幕: http://i.imgur.com/eEuy0En.png

原文: http://i.imgur.com/GtkKWKu.jpg

图片大于屏幕: http://i.imgur.com/1cH4rrk.png

原文: http://i.imgur.com/ThNhapb.jpg

较小的图像应该在屏幕上填满,但它不会,并且缩放在这两种情况下都不起作用。我只能平移较大的图像。

【问题讨论】:

  • 请查看我的回答

标签: ios swift uiscrollview uiimage


【解决方案1】:

您的问题是 UIScrollViewDelegate 方法中的拼写错误

应该是

func viewForZooming(in scrollView: UIScrollView) -> UIView?

希望对你有帮助

【讨论】:

  • 谢谢,这解决了缩放问题。 AspectFill 仍然不起作用:/
  • 我认为你应该使用imageView.contentMode = .scaleAspectFit 而不是imageView.contentMode = .scaleAspectFill
【解决方案2】:

请试试这个:

    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return imageView!
    }

    func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
        self.scrollView.flashScrollIndicators()
    }

【讨论】:

    【解决方案3】:

    创建两个出口:---

            @IBOutlet weak var scrollView: UIScrollView!
            @IBOutlet weak var imgPhoto: UIImageView!
            override func viewDidLoad() {
            super.viewDidLoad()
               scrollView.minimumZoomScale = 1.0
               scrollView.maximumZoomScale = 6.0
           }
    
          func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    
        return imgPhoto
    }
    

    其他代码

             let image = UIImage(named: "fish")!
    
             imageView = UIImageView(image: image)
             imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size)
             //        imageView.contentMode = .scaleAspectFill
             //        
             scrollView = UIScrollView(frame: view.bounds)
            //        scrollView.backgroundColor = UIColor.black
            //        scrollView.contentSize = imageView.bounds.size
    
              scrollView.delegate = self
    
            scrollView.minimumZoomScale = 0.1
            scrollView.maximumZoomScale = 4.0
          //scrollView.zoomScale = 1.0
    
           scrollView.addSubview(imageView)
           view.addSubview(scrollView)
    

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 1970-01-01
      • 2019-05-23
      • 2010-10-27
      • 1970-01-01
      • 2011-11-11
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多