【问题标题】:Using a scroll view to zoom in an image with Swift在 Swift 中使用滚动视图放大图像
【发布时间】:2018-07-07 10:00:12
【问题描述】:

我正在从 Apple 的“App Development in Swift”中学习 Swift。

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

书上说要让滚动视图和图像视图都与带有约束的屏幕一样大,所以我将顶部、底部、前导和尾随约束添加为 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()
}


}

我尝试在互联网上四处寻找,但没有找到任何东西。我希望这不是一个愚蠢的问题,但我想了一天。

【问题讨论】:

    标签: ios swift interface-builder


    【解决方案1】:

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

    让我们继续使用 imageView。

    在故事板上选择它,然后在助理编辑器中将内容模式更改为适合方面,如下所示:

    现在让我们转到代码,

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

    scrollView.delegate = self
    

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

    并考虑添加这个:

    scrollView.minimumZoomScale = 1.0
    scrollView.maximumZoomScale = 5.0
    
    scrollView.contentSize = .init(width: 2000, height: 2000)
    

    最好, 马克

    【讨论】:

    • 非常感谢!奇怪的是它在书中没有解释任何这些。有时对于初学者来说真的不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多