UIScrollView 放大时用一根手指平移



我得到了一个滚动视图,其中添加了一些子视图。滚动和缩放工作正常。

我想的是,当 scrollView 放大时,将 1 根手指触摸的行为更改为平移而不是滚动。

现在,如果您放大并用一根手指四处移动,则只能滚动放大的内容。用两根手指可以平移。这就是我想改变的行为。

还没有找到解决这个问题的任何解决方案,除了尝试更改所需的最小和最大接触之外,我真的没有任何想法,但它似乎不起作用。

func scrollViewDidZoom(_ scrollView: UIScrollView) {
    scrollView.panGestureRecognizer.maximumNumberOfTouches = 1
}
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
    if scale == 1 {
        scrollView.panGestureRecognizer.maximumNumberOfTouches = 2
    }
}

我意识到我遇到的问题是每个子视图都有自己的scrollView(在我的例子中是我的子视图wkWebViews(。他们正在处理自己的缩放,即使我试图从UIScrollView缩放。

我采取了这些步骤来解决这个问题。

MyClass: UIViewController, UIScrollViewDelegate {
  // This view should handle the zooming 
  @IBOutlet var scrollView: UIScrollView!
  // .. and this view will contain all subviews to be zoomed
  @IBOutlet var wrapper: UIView!
  override func viewDidLoad() {
    super.viewDidLoad()
    self.scrollView.delegate = self
    self.addSViewsToScrollView()
  }
  func addViewsToScrollView () {
    // MARK: - Step 1 
    // .. set wkWebView scrollview maximum and minimum zoom scale to 1.
    let myArray: [WkWebView]? = [WkWebView(),WkWebView(),WkWebView()] 
    for view in myArray {
      wkWebView.scrollView.maximumZoomScale = 1
      wkWebView.scrollView.minimumZoomScale = 1
      wkWebView.isUserInteractionEnabled = false // This is key otherwise it wont work
      wkWebView.scrollView.isUserInteractionEnabled = false // .. this aswell
    }
    // MARK: - Step 2
    // .. add all views to a wrapper view
    for view in myArray {
      self.wrapperView.addSubview(view)
    }
  }
  func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return self.wrapper
  }
}

通过返回单个视图,放大状态下的平移工作正常。此外,wkWebView滚动视图不再干扰缩放。

最新更新