在另一个视图中滚动 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 时更快地滚动它的主要内容,如果未能解决你的问题,请参考以下文章