UIScrollView 放大时用 1 根手指平移

Posted

技术标签:

【中文标题】UIScrollView 放大时用 1 根手指平移【英文标题】:UIScrollView pan with 1 finger when zoomed in 【发布时间】:2018-01-24 15:59:44 【问题描述】:

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

我想要的是当滚动视图被放大时,改变 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
    

【问题讨论】:

【参考方案1】:

我意识到我遇到的问题是每个子视图都有自己的滚动视图(在我的例子中是我的子视图 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 滚动视图也不再干扰缩放。

【讨论】:

以上是关于UIScrollView 放大时用 1 根手指平移的主要内容,如果未能解决你的问题,请参考以下文章

如何延迟/减慢 UIScrollView 平移速度

iPhone SDK 用 2 根手指缩放/调整图像大小!!帮助

放大和平移时看到大面积的 UIScrollView 背景

当 1 根手指在屏幕上抬起时禁用捏合识别器

使用UIScrollView用两根手指滚动

UIScrollView 在不正确的点上缩放