Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在ARScene中使用UIPanGesture移动节点_Ios_Swift_Scenekit_Arkit - Fatal编程技术网

Ios 在ARScene中使用UIPanGesture移动节点

Ios 在ARScene中使用UIPanGesture移动节点,ios,swift,scenekit,arkit,Ios,Swift,Scenekit,Arkit,所以我尝试设置平移手势,将sceneview中的节点移动到视图的另一个区域。例如,如果我将杯子放在平面上,我希望能够将杯子移动到该平面上的另一个位置。到目前为止,我还没有考虑其他问题,但仍然感到困惑 @objc func panGesture(sender: UIPanGestureRecognizer){ let sceneView = sender.view as! ARSCNView let pannedLocation = sender.location(in: sce

所以我尝试设置平移手势,将sceneview中的节点移动到视图的另一个区域。例如,如果我将杯子放在平面上,我希望能够将杯子移动到该平面上的另一个位置。到目前为止,我还没有考虑其他问题,但仍然感到困惑

@objc func panGesture(sender: UIPanGestureRecognizer){

    let sceneView = sender.view as! ARSCNView
    let pannedLocation = sender.location(in: sceneView)
    let hitTest = sceneView.hitTest(pannedLocation)

    let state = sender.state

    if(state == .failed || state == .cancelled){
        return
    }

    if(state == .began){
        let sceneHitTestResult = hitTest.first!
    }
}

查看这个答案,了解一个完整的游乐场示例

您需要将此行添加到viewDidLoad

sceneView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(panGesture(_:))))
基本的泛感觉功能是

@objc func panGesture(_ gesture: UIPanGestureRecognizer) {     

gesture.minimumNumberOfTouches = 1

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

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

let hits = self.sceneView.hitTest(gesture.location(in: gesture.view), options: nil)
if let tappedNode = hits.first?.node {
    let position = SCNVector3Make(result.worldTransform.columns.3.x, result.worldTransform.columns.3.y, result.worldTransform.columns.3.z)
    tappedNode.position = position
 }

} 

查看这个答案,了解一个完整的游乐场示例

您需要将此行添加到viewDidLoad

sceneView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(panGesture(_:))))
基本的泛感觉功能是

@objc func panGesture(_ gesture: UIPanGestureRecognizer) {     

gesture.minimumNumberOfTouches = 1

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

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

let hits = self.sceneView.hitTest(gesture.location(in: gesture.view), options: nil)
if let tappedNode = hits.first?.node {
    let position = SCNVector3Make(result.worldTransform.columns.3.x, result.worldTransform.columns.3.y, result.worldTransform.columns.3.z)
    tappedNode.position = position
 }

} 

以下是我如何做到这一点的答案:以下是我如何做到这一点的答案: