在另一个视图中滚动 UIScrollView 时滚动速度更快

Scroll UIScrollView faster when scrolling it through another view

我有一张 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)
    }
}

不应在实时应用用户输入转换时对内容偏移的变化进行动画处理,因为这很容易减慢反馈速度。

改变

tiledScrollView.setContentOffset(offset, animated: true)

tiledScrollView.setContentOffset(offset, animated: false)

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

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 的乘数。