我有一個包含一個類ARSCNView:
class ARSessionCameraView: NSObject {
var delegate: ARViewWrapperDelegate?
var arKitView: ARSCNView = ARSCNView()
// Sets the frame of the ARKit view
func setupViews(arFrame: CGRect) {
arKitView = ARSCNView(frame: arFrame)
self.delegate?.viewsDidCreate(arKitView: arKitView)
}
// Sets the session delegate
func setupARSession(position: AVCaptureDevice.Position) {
if position == .back {
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal]
configuration.userFaceTrackingEnabled = true
self.arKitView.session.run(configuration)
} else if position == .front {
let configuration = ARFaceTrackingConfiguration()
configuration.isWorldTrackingEnabled = true
self.arKitView.session.run(configuration)
}
self.arKitView.session.delegate = self
...
}
我能夠接收來自以下的委托更新呼叫ARSessionDelegate:
extension ARSessionCameraView: ARSessionDelegate {
// Called whenever there is a new ARFrame from the ARSession
func session(_ session: ARSession, didUpdate frame: ARFrame) {
}
func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) {
print(camera.trackingState)
}
func sessionWasInterrupted(_ session: ARSession) {
// Inform the user that the session has been interrupted, for example, by presenting an overlay.
}
}
但是,由于某種原因無法從這些ARSCNViewDelegate方法接收委托更新:
extension ARSessionCameraView: ARSCNViewDelegate {
/// - Tag: PlaceARContent
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
// Place content only for anchors found by plane detection.
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
}
/// - Tag: UpdateARContent
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
// Update only anchors and nodes set up by `renderer(_:didAdd:for:)`.
guard let planeAnchor = anchor as? ARPlaneAnchor
else { return }
}
}
uj5u.com熱心網友回復:
您永遠不會在您的實體上設定delegate屬性。ARSCNView
func setupViews(arFrame: CGRect) {
arKitView = ARSCNView(frame: arFrame)
arKitView.delegate = self // Add this line
self.delegate?.viewsDidCreate(arKitView: arKitView)
}
而且您很可能還需要添加arKitView到父視圖才能呼叫這些委托方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/530617.html
標籤:IOS迅速方舟浏览器
