在另一个视图中滚动 UIScrollView 时更快地滚动它

Posted

技术标签:

【中文标题】在另一个视图中滚动 UIScrollView 时更快地滚动它【英文标题】:Scroll UIScrollView faster when scrolling it through another view 【发布时间】: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)
    

【问题讨论】:

【参考方案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 的乘数。

【讨论】:

我试过了,但这并没有得到想要的结果。问题是当我们输入平移手势时,较大的视图不会将可视区域转换到所需区域。

以上是关于在另一个视图中滚动 UIScrollView 时更快地滚动它的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 不会滚动,从未调用过委托方法

在 UIScrollview 中设置 size 属性

如何让 UIScrollView 忽略单次触摸?

如何一键同时控制两个 UIScrollView?

UIScrollView 奇数滚动

UIScrollView 根本不滚动