1

我正在开发一个移动应用程序,但缩放功能有问题。我正在使用 React Native PinchGestureHandler。它提供了一个scale参数,定义为:

相对于屏幕坐标中两次触摸点的比例因子

这意味着:两个手指越远,比例因子越大。现在让我们假设我有一个使用这个scale因子放大的对象。让我们还假设用户想要放大很远并且停止缩放比例因子为5. 现在我将比例范围存储在一个状态中(在这种情况下prevScaleRange = 4,因为5 - 1lastScaleFactor - inititalScaleFactor),以便对于下一个捏事件,它不是从比例开始,而是从使用这个公式1的当前可见比例因子开始:5

newScale = event.nativeEvent.scale + prevScaleRange

但是,当再次缩小事件的比例因子时,从 开始1,这意味着比例因子的(理论)范围是1(从10)。但在“放大”的情况下,范围是4. 因此,当我现在使用上述公式进行缩小时,用户至少需要四个捏合事件才能达到prevScaleRange = 0.

不知何故,我无法找到一个公式来调整缩放因子以使缩小事件与放大事件具有相同的速度。有人可以帮忙吗?

4

1 回答 1

1

因为当放大比例因子从 1 到 4 时,当缩小它从 1 到 0 时,我们只能在缩小时重新缩放比例因子值,所以它不是从 1 到 0,而是从 1 到 -4 (可以调整)。

参考这个公式:https ://stats.stackexchange.com/a/70808/190619

// Pinch event scale factor
const scaleFactor = e.scale 

if (scaleFactor < 1) {
  const OLD_MAX = 1
  const OLD_MIN = 0

  const NEW_MAX = 1
  const NEW_MIN = -4

  const newScale = ((NEW_MAX - NEW_MIN) / (OLD_MAX - OLD_MIN)) * (scaleFactor - OLD_MAX) + NEW_MAX
}

于 2021-03-19T05:05:55.140 回答