七天帶你初探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







你可能感興趣的文章

C 語言練習程式(7) -- 直接改變陣列內容&利用指標達成回傳型態轉換 -- 指標相關程式集錦(6)

C 語言練習程式(7) -- 直接改變陣列內容&利用指標達成回傳型態轉換 -- 指標相關程式集錦(6)

[23] 強制轉型 - 明確的強制轉型、Strings <> Numbers、日期轉 Number、位元運算子

[23] 強制轉型 - 明確的強制轉型、Strings <> Numbers、日期轉 Number、位元運算子

30-Day LeetCoding Challenge 2020 April Week 3 || Leetcode 解題

30-Day LeetCoding Challenge 2020 April Week 3 || Leetcode 解題






留言討論