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 來做事。
- 宣告 results 為 sceneView 中,點擊測試的特徵點。
- 並檢查 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 裡會長這樣~