使用滚动视图在Swift中放大图像

时间:2018-07-07 10:00:13

标签: ios swift interface-builder

我正在从Apple的“ Swift应用开发”中学习Swift。

我遇到了约束方面的问题,尤其是在第593页的“ I Spy”实验室上。它基本上是希望您创建一个内部带有图像视图的滚动视图并使之滚动,以便您可以放大图像并滚动就像打开照片时在“照片”应用中一样。

这本书说要使滚动视图和图像视图都与具有约束的屏幕一样大,因此我将top,bottom,前导和尾随约束添加到0,并且效果很好。

当我添加图像视图时,我开始遇到问题。如果设置与滚动视图相同的约束,则表示缺少X和Y位置的约束,并且不起作用。 如果确实添加了这些约束,那么我将其水平和垂直对齐,则图像只是延伸到屏幕上,但仍然无法缩放或滚动。

视图控制器的代码为:

class ViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    scrollView.delegate = ViewController()
    updateZoomFor(size: view.bounds.size)
}

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

func updateZoomFor(size: CGSize){
    let widthScale = size.width / imageView.bounds.width
    let heightScale = size.height / imageView.bounds.height
    let scale = min(widthScale,heightScale)
    scrollView.minimumZoomScale = scale
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}


}

我尝试在Internet上环顾四周,但没有找到任何东西。我希望这不是一个愚蠢的问题,但我现在设法解决了这一天。

1 个答案:

答案 0 :(得分:3)

让我们从约束开始,正确添加了您的滚动视图, 现在,对于imageView,将其拖放到滚动视图中,以所需的方式指定左上右下角的约束,并将imageView垂直和水平居中放置,就像下面的屏幕截图一样

left right top bottom constraints

center imageView

让我们继续使用imageView。

在情节提要上选择它,然后在助手编辑器中将内容模式更改为适合方面的方式:

aspect fit

现在让我们转到代码,

通过键入scrollView.delegate = ViewController(),您正在创建一个类型为ViewController的新实例,并且您没有使用现有实例,这就是为什么您应将这一行替换为:

scrollView.delegate = self

这样,您将引用您的超类,即您现有的视图控制器

并考虑添加此内容:

scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 5.0

scrollView.contentSize = .init(width: 2000, height: 2000)

最好, 马克