closures缩放UIScrollView

有没有人知道使用UIScrollView时暂时closures缩放的方法?

我看到你可以禁用滚动使用以下内容:

self.scrollView.scrollEnabled = false; 

但是我没有看到类似的缩放命令。 有什么想法吗?

如果您想禁用用户通过手势缩放的能力,那么在iOS 5及更高版本中,您可以禁用捏手势。 这仍然允许您从代码中控制滚动视图…

 scrollView.pinchGestureRecognizer.enabled = NO; 

类似的泛…

 scrollView.panGestureRecognizer.enabled = NO; 

这必须在- (void)viewDidAppear:(BOOL)animated调用,否则系统将其重置为启用。

按照上面的fbrereto的build议,我创build了两个函数lockZoom和unlockZoom。 locking缩放时,我将最大和最小缩放比例复制到variables,然后将最大和最小缩放比例设置为1.0。 解锁缩放只是颠倒过程。

 -(void)lockZoom { maximumZoomScale = self.scrollView.maximumZoomScale; minimumZoomScale = self.scrollView.minimumZoomScale; self.scrollView.maximumZoomScale = 1.0; self.scrollView.minimumZoomScale = 1.0; } -(void)unlockZoom { self.scrollView.maximumZoomScale = maximumZoomScale; self.scrollView.minimumZoomScale = minimumZoomScale; } 

你也可以在UIScrollViewDelegate中以缩放视图的forms返回“nil”:

 - (UIView *) viewForZoomingInScrollView:(UIScrollView *) scrollView { return canZoom?view:nil; } 

检查设置minimumZoomScalemaximumZoomScale ; 根据文件 :

maximumZoomScale必须大于minimumZoomScale才能启用缩放。

所以,将值设置为相同应禁用缩放。

我知道这是一个非常古老的问题,但为了我的目的,我做了一些小小的改动。

我希望能够轻松地判断缩放实际上是启用还是禁用,而不依赖于scrollView.minimumZoomScale == scrollView.maximumZoomScale之间的比较,这可能无法反映缩放是否实际启用/禁用。

所以我做了这个

 // .h @property (assign, nonatomic, getter=isZoomEnabled) BOOL zoomEnabled; // .m @synthesize zoomEnabled = _zoomEnabled; - (void)setZoomEnabled:(BOOL)zoomEnabled; { _zoomEnabled = zoomEnabled; UIScrollView *scrollView = self.scrollView; if (zoomEnabled) { scrollView.minimumZoomScale = self.minimumZoomScale; scrollView.maximumZoomScale = self.maximumZoomScale; } else { scrollView.minimumZoomScale = 0.0f; scrollView.maximumZoomScale = 0.0f; } } 

self.minimumZoomScaleself.maximumZoomScale的值是在configurationUIScrollView时设置的。

这使我能够设置/询问是否启用缩放function。

 myViewController.zoomEnabled = YES; myViewController.isZoomEnabled; 

在这里,我的解决scheme停止缩放scrollview。

 self.scrollView.minimumZoomScale=self.scrollView.maximumZoomScale; 

如果您只想禁用缩放手势进行缩放,则下面的代码会执行这个技巧。

 scrollView.pinchGestureRecognizer?.requireGestureRecognizerToFail(scrollView.panGestureRecognizer) 

Swift 3版本:

 func lockScrollViewZooming() { scrollView.minimumZoomScale = 1.0 scrollView.minimumZoomScale = 1.0 scrollView.bounces = false scrollView.bouncesZoom = false // Also, if you have double tap recognizer, // remember to remove it scrollView.removeGestureRecognizer(doubleTapGestureRecognizer) } func unlockScrollViewZooming() { scrollView.minimumZoomScale = 1.0 scrollView.maximumZoomScale = 4.0 scrollView.bounces = true scrollView.bouncesZoom = true // Also, if you have double tap recognizer, // remember to add it scrollView.removeGestureRecognizer(doubleTapGestureRecognizer) } 

请注意, doubleTapGestureRecognizer应该是一个实例variables。 它应该类似于:

 private lazy var doubleTapGestureRecognizer: UITapGestureRecognizer = { let doubleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap(_:))) doubleTapGestureRecognizer.numberOfTapsRequired = 2 doubleTapGestureRecognizer.delegate = self return doubleTapGestureRecognizer }() @objc private func handleDoubleTap(_ recognizer: UITapGestureRecognizer) { //scrollView.setZoomScale((scrollView.zoomScale > scrollView.minimumZoomScale) ? scrollView.minimumZoomScale : scrollView.maximumZoomScale, animated: true) if scrollView.zoomScale > scrollView.minimumZoomScale { scrollView.setZoomScale(scrollView.minimumZoomScale, animated: true) } else { let touchLocation = recognizer.location(in: recognizer.view) scrollView.zoom(to: CGRect(origin: touchLocation, size: CGSize(width: 22.0, height: 20.0)), animated: true) } } 

我已经尝试将UIScrollView minimumZoomScalemaximumZoomScale属性设置为1UIView isMultipleTouchEnabled属性为false或从viewForZooming(in:)返回nil viewForZooming(in:)UIScrollViewDelegate但没有工作。 在我的情况下,经过几次反复试验,以下作品在我的情况[testing在iOS 10.3]:

 class MyViewController: UIViewController { var webView: WKWebView? override viewDidLoad() { super.viewDidLoad() //... self.webView.scrollView.delegate = self //... } } extension MyViewController: UIScrollViewDelegate { func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) { scrollView.pinchGestureRecognizer?.isEnabled = false } }