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 设置动画时不需要的滚动