簡體   English   中英

適用於SceneKit IOS的​​平滑捏手勢

[英]Smooth Pinch Gesture for SceneKit IOS

我正在Arkit中為3D模型捏捏手勢,遇到一個問題,當我縮放模型時,它會滯后並且不能給我流暢的響應。 它工作正常,但我需要使其更平滑。

 @objc func scalePiece(gestureRecognizer : UIPinchGestureRecognizer) {   guard gestureRecognizer.view != nil else { return }

        if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {

            let scale = Float(gestureRecognizer.scale)

            let newscalex = scale / currentscalex
            let newscaley = scale / currentscaley
            let newscalez = scale / currentscalez

            self.drone.scale = SCNVector3(newscalex, newscaley, newscalez)

        }}

任何提示將不勝感激。

您可能在currentscale和計算出的newscale后面有一些邏輯,但是簡單的gestureRecognizer.scale提供平滑的縮放。 我認為您會遇到麻煩的縮放比例,因為直接設置了scale 使用SCNAction.scale

let action = SCNAction.scale(by: gestureRecognizer.scale, duration: 0.1)
lv.runAction(action)
gestureRecognizer.scale = 1

代替

self.drone.scale = SCNVector3(newscalex, newscaley, newscalez)

如果x,y,z的比例尺值不同,請使用customAction

let action = SCNAction.customAction(duration: 0.1) { (yourNode, elapsedTime) in
    let percentage = elapsedTime / 0.1
    let newscalex = scale / currentscalex * percentage
    let newscaley = scale / currentscaley * percentage
    let newscalez = scale / currentscalez * percentage
    yourNode.scale = SCNVector3(newscalex, newscaley, newscalez)
}

將所有三個軸的/都替換為*,並重置手勢識別器的比例。 換句話說,與標度相乘而不是除以標度。

為防止其按指數比例縮放,請在讀取后將其重新設置為1.0。 例如:

  if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
            let scale = Float(gestureRecognizer.scale)

            let newscalex = scale * self.drone.scale.x
            let newscaley = scale * self.drone.scale.y
            let newscalez = scale * self.drone.scale.z

            self.drone.scale = SCNVector3(newscalex, newscaley, newscalez)
            gestureRecognizer.scale = 1.0
   }

重置手勢Recognizer基本上是一種替代方法,用於將原始比例存儲在開始狀態,並在將其分配給當前對象之前將識別器的比例因子應用於該比例。 重要說明中的文檔中專門描述了這種情況: https : //developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_uikit_gestures/handling_pinch_gestures

暫無
暫無

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

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