【问题标题】:UIkit elements can't see in overlaySKScene for ARUIkit 元素在用于 AR 的 overlaySKScene 中看不到
【发布时间】:2018-05-27 10:47:26
【问题描述】:

我使用 overlaySKScene 制作了一些带有界面的简单 AR 应用。

在 viewDidLoad 中,我在主 ARSCNView 中应用了叠加场景(OverlayScene 是我的类继承的 SKScene)。

self.sceneView.overlaySKScene = [[OverlayScene alloc] initWithSize:self.sceneView.bounds.size];  
self.sceneView.overlaySKScene.delegate = self; 

然后,我在 OverlayScene init 中添加了 UIkit 按钮。

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];  
[button setTitle:@"button" forState:UIControlStateNormal];  
button.layer.position = CGPointMake(self.view.frame.size.width/2, 200);  
[self.view addSubview:button];  

但是,那个按钮没有出现在屏幕上。 当我在这个场景中添加精灵节点时,它起作用了。

是否有其他方法或错误?

谢谢。

【问题讨论】:

    标签: objective-c sprite-kit uikit scenekit arkit


    【解决方案1】:

    OverlaySceneinit 并不是一个真正适合这样做的地方,因为self.view 将等于nil,因为当一个场景被初始化时,它还没有被添加到视图层次结构中。更好的选择可能是SKScene 生命周期方法- (void)didMoveToView:(SKView *)view;,例如:

    - (void)didMoveToView:(SKView *)view {
        [super didMoveToView:view];
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];  
        [button setTitle:@"button" forState:UIControlStateNormal];  
        button.layer.position = CGPointMake(self.view.frame.size.width/2, 200);  
        [self.view addSubview:button];
    }
    

    【讨论】:

    • 是的。不过还要注意,您的UIButton 与覆盖SKScene 的视觉内容完全无关,它恰好由您的SKScene 子类管理。如果您的 UI 覆盖层没有使用 SpriteKit 内容,则不需要overlaySKScene — 您只需将 UIKit 控件放在您的 AR 视图之上即可。
    • 非常同意rickster。
    • @rickster 对为什么 overlaySKScene 不起作用有任何想法吗?类似问题的答案没有帮助,而且代码 sn-p 是如此简单——不清楚为什么它不起作用!
    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多