如何在SceneKit场景加载时显示UIActivityIndi​​catorView

时间:2014-11-14 08:21:54

标签: scenekit

场景加载大约需要7-9秒。所以我需要一个活动指标。

我像这样创建微调器:

    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
    spinner.layer.cornerRadius = 5;
    spinner.opaque = NO;
    spinner.backgroundColor = [UIColor clearColor];
    spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
    [spinner setColor:[UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0]];

添加如下子视图:

    [sceneView addSubView:spinner];

尝试在viewDidLoad中调用:

[spinner startAnimating];
//load the scene
[spinner stopAnimating];

但它永远旋转,场景永远不会加载。

这样做的正确方法是什么?

我根据@mnuages回复尝试了这个:

- (void)renderer:(id<SCNSceneRenderer>)aRenderer willRenderScene:(SCNScene *)scene atTime:(NSTimeInterval)time  {

if ([self spinner] == nil) {
    _spinner = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(0, 0, 250, 250)];
    _spinner.layer.cornerRadius = 5;
    _spinner.opaque = YES;
    _spinner.backgroundColor = [UIColor purpleColor];
    _spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
    [_spinner setColor:[UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0]];
    _spinner.center = self.view.center;

    [self.view addSubview:_spinner];
    [self.view bringSubviewToFront:_spinner];
    [[self spinner] startAnimating];
}

NSLog(@"BEGIN SCENE RENDER %@",scene);

}

- (void)renderer:(id<SCNSceneRenderer>)aRenderer didRenderScene:(SCNScene *)scene atTime:(NSTimeInterval)time  {

[[self spinner] stopAnimating];
[_spinner removeFromSuperview];
_spinner = nil;

NSLog(@"END SCENE RENDER %@", scene);

}

但这会被反复调用。而且旋转器没有显示出来。我仍然看到一个空白的白色屏幕(在IB中设置了SCNView的初始白色背景颜色,稍后在viewDidLoad中将其更改为灰色)。

1 个答案:

答案 0 :(得分:1)

您可以查看SCNSceneRenderer.delegate-renderer:didRenderScene:atTime: