代码之家  ›  专栏  ›  技术社区  ›  Frankenstein

在其他视图中滚动UIScrollView时,滚动速度更快

  •  1
  • Frankenstein  · 技术社区  · 7 年前

    我有一个 UIScrollView 带有大型 UIImageView 具有非常高分辨率的图像(约10000 x 10000)。在这个 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 回复  |  直到 7 年前
        1
  •  1
  •   glyvox    7 年前

    不应设置动画 实时应用用户输入转换时内容偏移量的变化,因为这很容易减慢反馈速度。

    改变

    tiledScrollView.setContentOffset(offset, animated: true)
    

    tiledScrollView.setContentOffset(offset, animated: false)
    
        2
  •  0
  •   trndjc    7 年前

    我不完全确定您想如何实现这一点,但如果您想减慢或加快平移手势的转换,请添加一个乘数。

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