【问题标题】:Scroll UIScrollView faster when scrolling it through another view在另一个视图中滚动 UIScrollView 时更快地滚动它
【发布时间】:2017-12-12 11:33:48
【问题描述】:

我有一个UIScrollView 和大UIImageView,图像分辨率非常高(约10,000 x 10,000)。在这个UIImageView 中,缩放和滚动都启用了。我也有一个较小的UIImageView,具有相同的图像,但分辨率要小得多(大约 100 x 100)。我在较小的UIImageView 上显示较大的UIImageView 的可见部分。并且用户可以通过在较小的UIImageView 上平移来导航到较大的UIImageView 上的其他地方。下图显示了我要解释的内容。我的问题是在较小的 UIImageView 上平移时,在较大的 UIScrollView 中滚动真的很慢。

// function that handles the pan on green view
func handlePanNavigation(gestureRecognizer: UIPanGestureRecognizer) {

    if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
        let translation = gestureRecognizer.translation(in: navigationPanel)
        guard let gv = gestureRecognizer.view else { return }
        let point = CGPoint(x: gv.center.x + translation.x, y: gv.center.y + translation.y)
        gestureRecognizer.view?.center = point
        gestureRecognizer.setTranslation(.zero, in: navigationPanelView)

        let transform = CGAffineTransform(scaleX: orgSize.width*tiledScrollView.zoomScale/navSize.width, y: orgSize.height*tiledScrollView.zoomScale/navSize.height)
        let offset = navigationPanelView.frame.origin.applying(transform)
        tiledScrollView.setContentOffset(offset, animated: true)
    }
}

【问题讨论】:

    标签: ios swift uiscrollview uiimageview uiscrollviewdelegate


    【解决方案1】:

    在实时应用用户输入的转换时,您不应该动画内容偏移的变化,因为这很容易减慢反馈。

    改变

    tiledScrollView.setContentOffset(offset, animated: true)
    

    tiledScrollView.setContentOffset(offset, animated: false)
    

    【讨论】:

      【解决方案2】:

      我不完全确定您想如何完成此操作,但如果您想减慢或加快平移手势翻译,请添加一个乘数。

      switch gesture.state {
      
          case .began:
              gesture.setTranslation(CGPoint.zero, in: gesture.view)
      
          case .changed:
      
              gesture.setTranslation(CGPoint.zero, in: gesture.view)
      
              if someView.frame.origin.y < someThreshold {
                  someView.center = CGPoint(x: someView.center.x, y: someView.center.y + (translation.y * 0.25))
              }
      
          ...
      

      在这里,任何向上超过someThreshold 的平移速度都会慢 4 倍。显然,在您的情况下,添加一个大于 1 的乘数。

      【讨论】:

      • 我试过了,但这并没有得到想要的结果。问题是当我们输入平移手势时,较大的视图不会将可视区域转换到所需区域。
      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2021-03-24
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多