![](/img/trans.png)
[英]How to change speed of translate and scale when zooming in and out in D3 (using zoom.on & d3.event.translate, d3.event.zoom)?
[英]How to increase “zoom out” speed in a pinch gesture handler where the scale ranges 0 - 1 for zooming out but 1 - n for zooming in?
我正在開發一個移動應用程序,但縮放功能有問題。 我正在使用 React Native PinchGestureHandler
。 它提供了一個scale
參數,定義為:
相對於屏幕坐標中兩次觸摸點的比例因子
這意味着:隨着比例因子越大,兩個手指 go 越遠。 現在讓我們假設我有一個 object 使用這個scale
因子放大。 讓我們還假設用戶想要放大很遠並且在比例因子為5
時停止縮放。 現在我將比例范圍存儲在 state 中(在這種情況下prevScaleRange = 4
,因為5 - 1
或lastScaleFactor - inititalScaleFactor
),因此對於下一個捏事件它不是從1
的比例開始,而是從當前可見的比例開始使用此公式的因子5
:
newScale = event.nativeEvent.scale + prevScaleRange
但是,當縮小事件的比例因子再次從1
開始時,這意味着比例因子的(理論)范圍是1
(從1
到0
)。 但在“放大”的情況下,范圍是4
。 因此,當我現在使用上述公式進行縮小時,用戶至少需要四個捏合事件才能達到prevScaleRange = 0
的第一種情況。
不知何故,我無法找到一個公式來調整縮放因子以使縮小事件與放大事件具有相同的速度。 有人可以幫忙嗎?
因為當放大比例因子從 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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.