簡體   English   中英

Swift - PanGesture識別器 - 隨物體移動 - 移動速度

[英]Swift - PanGesture Recognizer - move with object - speed of movement

我在Swift for iOS中使用PanGesture Recognizer。 在動作方法里面,我正在調用第三方方法,它采取移動方向和速度。 由此,它計算對象的位置:

objectPos += normalize(move) * speed

問題是,如果我將手指放在某個物體上並用手指移動,物體就不會在我手指下的同一位置。 它開始變慢/變速。 移動方向沒問題。 問題在於加速/減速 - 如果我移動得更快,物體移動得更快。

在手勢回調中,我嘗試過:

let move = recognizer.translation(in: self.view);
let speed = sqrt((move.x * move.x) + (move.y * move.y));

let move = recognizer.velocity(in: self.view);
let speed = dt * sqrt((move.x * move.x) + (move.y * move.y));

通常dt = 1.0 / 60.0 這是手勢回調刷新率(在代碼中,我使用CFAbsoluteTimeGetCurrent()差異手動計算dt)。 如果沒有這個,如果我直接使用速度計算速度,運動速度太快。

我試圖通過減去當前和最后的位置手動計算差異,但仍然沒有運氣。

我也試圖根據當前視圖的寬度和高度“改變速度”,但是如果工作則沒有。 我可能錯過了什么,但不知道是什么。

如果您在用戶停止觸摸對象時根據加速度計算對象的移動會更容易。

只要用戶將手指放在對象上,就可以更輕松地將對象的位置設置為從平移手勢識別器獲得的位置。

好的......我發現了問題。 通過角[0,0] - [1,1]將其移動到屏幕標准化坐標中。 因此,Y軸(高度)的移動是正確的,但在X軸(寬度)中,速度約為一半。

以正確的寬高比乘以move.x解決了這個問題。 基本上,X軸的移動是手動放大的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM