七天帶你初探AR世界-Day 5


Day 5

今天教大家第二個手勢,UILongPressGestureRecognizer ,顧名思義為首長按螢幕會觸發的動作,本來想使用 UIPanGestureRecognizer 做拖移物件的動作,但昨天已經使用過了所以改為長按觸發來做。

首先我們一樣建立好手勢觸發後該做什麼事的 func

@objc func didPan(_ recognizer: UILongPressGestureRecognizer) {

    guard let recognizerView = recognizer.view as? ARSCNView else { return }

    if recognizer.state == .changed {

        let results = self.sceneView.hitTest(recognizer.location(in: recognizer.view),
                                             types: ARHitTestResult.ResultType.featurePoint)

        guard let result: ARHitTestResult = results.first else { return }

        object?.position = SCNVector3Make(result.worldTransform.columns.3.x,
                                          result.worldTransform.columns.3.y,
                                          object?.position.z ?? -0.5)
    }
}
  • 先確認 recognizer.view 是否為 ARSCNView
  • recognizer 有很多種形態,這邊我們使用 .change 來做事。
  • 宣告 resultssceneView 中,點擊測試的特徵點。
  • 並檢查 results 是否為上一次點擊的點,否則 return 掉。
  • 最後給予 object 長按點擊後所拖曳的的位置。

並加入 addGesture() 裡:

    func addGesture()  {
        let pinch = UIPinchGestureRecognizer(target: self, action: #selector(didPinch(_:)))
        let pan = UILongPressGestureRecognizer(target: self, action: #selector(didPan(_:)))
        sceneView.addGestureRecognizer(pan)
        sceneView.addGestureRecognizer(rotate)
}

目前你的手勢 func 裡會長這樣~

#ARKit #Gesture #3Dmodel #Day5







Related Posts

Leetcode 刷題 pattern - Fast & Slow Pointer

Leetcode 刷題 pattern - Fast & Slow Pointer

How to Set Up Firewall with UFW on Ubuntu 20.04

How to Set Up Firewall with UFW on Ubuntu 20.04

使用 node.js 寫出串接 API 的程式

使用 node.js 寫出串接 API 的程式




Sponsored



Comments