滚动浏览另一个视图时,可以更快地滚动UIScrollView

时间:2017-12-12 11:33:49

标签: ios swift uiscrollview uiimageview uiscrollviewdelegate

我有UIScrollViewUIImageView,图像分辨率非常高(约10,000 x 10,000)。在此UIImageView中,启用了缩放和滚动。我还有一个较小的UIImageView具有相同的图像,分辨率小得多(约100 x 100)。我在较小的UIImageView上显示较大UIImageView的可见部分。用户可以通过在较小的UIImageView上平移来导航到较大UIImageView上的其他位置。以下图片显示了我想要解释的内容。我的问题是在较小的UIImageView上进行平移时,较大的UIScrollView中的滚动速度非常慢。 enter image description here

// 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)
    }
}

2 个答案:

答案 0 :(得分:1)

在实时应用用户输入转换时,不应为内容偏移的更改设置动画,因为这很容易减慢反馈。

更改

tiledScrollView.setContentOffset(offset, animated: true)

tiledScrollView.setContentOffset(offset, animated: false)

答案 1 :(得分:0)

我并不完全确定您希望如何实现此目标,但如果您想减慢或加速平移手势转换,请添加乘数。

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