【问题标题】:Implementing zoom on UIScrollView在 UIScrollView 上实现缩放
【发布时间】:2019-09-14 03:24:51
【问题描述】:

我已经为 UIScrollView 上的缩放功能插入了 delegates 和适当的代码。但是,当我运行代码时,最小或最大缩放值会返回“nil”。我不明白如何绕过这个。有什么建议吗?

import UIKit
import MapKit
import MessageUI

class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet var scrollView: UIScrollView!
    @IBOutlet var tylenol: UIImageView!

    let backgroundImageView = UIImageView()

    override func viewDidLoad() {
        super.viewDidLoad()
        setBackground()

        self.scrollView.minimumZoomScale = 1.0
        self.scrollView.maximumZoomScale = 6.0
    }

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


    func setBackground() {
        view.addSubview(backgroundImageView)
        backgroundImageView.translatesAutoresizingMaskIntoConstraints = false
        backgroundImageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        backgroundImageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        backgroundImageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        backgroundImageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

        backgroundImageView.image = UIImage(named: "background")
        view.sendSubviewToBack(backgroundImageView)
    }

【问题讨论】:

  • 您上面的代码专门禁用缩放,因为最小和最大缩放级别设置为 1.0。需要咖啡吗?
  • 即使将值向上移动,它仍然显示“在展开可选值时意外发现 nil”
  • 您的故事板中肯定有 IBOutlet 连接到正确的类?
  • 场景链接到 ViewController。滚动视图放置在场景中,IBOutlet 在 ViewController 中被称为“scrollView”。图像视图放置在滚动视图内,并在 ViewController 中以 tylenol 的形式引用。
  • 调用 viewdidload 方法并尝试设置 minimumZoomScale 时是否崩溃?

标签: ios swift xcode uiscrollview uiimageview


【解决方案1】:

崩溃是由于试图解开声明为非可选的一个或两个出口造成的。这些在情节提要中没有正确连接。

@IBOutlet var scrollView: UIScrollView!
@IBOutlet var tylenol: UIImageView!

虽然与您的问题无关,但应声明如下以避免保留循环:

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

在你的故事板中,确保这些都设置好了:

【讨论】:

  • 还要确保 Tylenol 实际上是滚动视图的子视图。如果单击并将其拖动到滚动视图上,滚动视图将突出显示。
  • 这是我的设置。图片在链接中。 ibb.co/WxJnMqBibb.co/b6PzS26ibb.co/DbY12Gb
  • 您已将您的@IBOutlets 改回了我在答案中输入的内容?即使用! 而不是??该更改以及您发布的代码应该可以工作。如果它崩溃,那么它们没有正确连接,您需要删除连接并重做它们。
  • ...将您的滚动视图屏幕截图与我的比较。你还没有设置代表大声笑。您可以通过调用self.scrollView.delegate = self 在您的 viewDidLoad 中执行此操作,或者您可以在情节提要中连接它。不管怎样,这是你的问题。
  • 当我重做网点时,它反转为 !我按照你说的做了,效果很好!非常感谢!
【解决方案2】:

您应该将minimumZoomScalemaximumZoomScale 设置为大于1.0 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2012-12-22
    • 2012-08-16
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多