【发布时间】:2014-11-15 03:09:40
【问题描述】:
场景加载大约需要 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中更改为灰色)。
【问题讨论】:
标签: scenekit