UIScrollView zoomScale 初始更新后未更新

Posted

技术标签:

【中文标题】UIScrollView zoomScale 初始更新后未更新【英文标题】:UIScrollView zoomScale not updating after initial update 【发布时间】:2019-10-15 08:04:07 【问题描述】:

我有一个运行此代码的点击手势,它运行一次,然后停止更新zoomScale

@objc func sampleTapGestureTapped(_ recognizer: UITapGestureRecognizer) 
    print("tapped")
    if self.scrollView_Image.zoomScale > self.scrollView_Image.minimumZoomScale 
        scrollView_Image.setZoomScale(1, animated: false)
     else 
        scrollView_Image.setZoomScale(3, animated: false)
    

函数运行,tapped 打印被注销,但 zoomScale 似乎没有改变。

【问题讨论】:

该代码在哪里以及该操作的作用是什么? 我已经写在viewWillAppear里了。双击imageView放大图片,但只调用一次。 你能告诉我们@objc func sampleTapGestureTapped(..)...中的代码吗? productimageView 可能被销毁并重新创建? 所以选择器确实响应了。那是逻辑有缺陷吗? 【参考方案1】:

也许问题在于您的硬编码数字。这是我的做法:

    if sv.zoomScale < sv.maximumZoomScale 
        sv.setZoomScale(sv.maximumZoomScale, animated:anim)
    
    else 
        sv.setZoomScale(sv.minimumZoomScale, animated:anim)
    

请注意,这里没有硬编码数字。它适用于任何滚动视图。

【讨论】:

我已经完全使用了你的代码,但是 print 语句只执行了一次。再次双击时它不会调用它。它只是执行一次 好的,那么肯定有其他事情发生了。但你还没有告诉我们它是什么。之前您说过“我添加了打印语句来检查它是否已执行,以及它是否按预期执行”。所以我假设你的动作处理程序总是被调用。我的代码没有什么可以改变这一点;我只是建议你改变这些行。我的sv 是你的scrollView_Image 如果我只使用 print 语句,它每次都会被调用。但是,当我在 print 语句下方使用缩放代码(如您在上面建议的)时,它只被调用一次,然后停止被调用。 好吧,我无法解释。您必须正在做一些删除手势识别器的操作。【参考方案2】:

我已经在一个小的视图控制器中尝试过这个,它工作正常。您在选择器中执行的操作可能会阻止手势工作。您可能还应该发布选择器功能代码,以及与设置识别器和图像视图相关的任何内容

class ViewController: UIViewController 
    var tappableImageView: UIImageView!

    override func viewDidLoad() 
        super.viewDidLoad()
        tappableImageView = UIImageView(frame: CGRect(x: 40, y: 40, width: 100, height: 100))
        tappableImageView.backgroundColor = .red
        view.addSubview(tappableImageView)
        tappableImageView.isUserInteractionEnabled = true

        let t = UITapGestureRecognizer(target: self, action: #selector(imageViewDoubleTapped(_:)))
        t.numberOfTapsRequired = 2
        tappableImageView.addGestureRecognizer(t)
    

    @objc func imageViewDoubleTapped(_ recognizer: UITapGestureRecognizer) 
        print("Double Tapped")
    

【讨论】:

不幸的是,这里的 OP 问题实际上与点击手势识别器无关。我已更新问题以突出他们遇到的实际问题。

以上是关于UIScrollView zoomScale 初始更新后未更新的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 中为 zoomScale 设置动画时不需要的滚动

UIScrollView 和 zoomScale

UIScrollView 的最大缩放比例

UIScrollView可以zoomToRect吗?

第一次动画UIScrollView contentOffset 没有动画

UIWebView 内部滚动视图