我有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)
}
}
答案 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的乘数。