Iphone UIProgressView未显示
我有一个UIProgressView,我想在我的GLKViewController上运行,而其余的代码由iOS加载。我已将UIProgressView放入我的“viewDidLoad”方法中。在viewDidLoad方法加载所有代码之前,UIProgressView不会显示。如何使UIProgressView在调用viewDidLoad方法后立即显示,并在viewDidLoad方法完成时结束Iphone UIProgressView未显示,iphone,ios,objective-c,xcode,opengl-es,Iphone,Ios,Objective C,Xcode,Opengl Es,我有一个UIProgressView,我想在我的GLKViewController上运行,而其余的代码由iOS加载。我已将UIProgressView放入我的“viewDidLoad”方法中。在viewDidLoad方法加载所有代码之前,UIProgressView不会显示。如何使UIProgressView在调用viewDidLoad方法后立即显示,并在viewDidLoad方法完成时结束 - (void)viewDidLoad { [super viewDidLoad];
- (void)viewDidLoad
{
[super viewDidLoad];
// Progress Bar
[threadProgressView setProgress: 0.0];
[self performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:NO];
// Disbale iPhone from locking
[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
// Set up context to use Open GL ES
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
// Create a view to display the Open GL ES content
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
/******** Default Settings **********/
m_kf = 0; // The current keyframe ID.
m_avPos = GLKVector3Make(0.0f, 0.0f, -35.0f); // Where to put the avata.
m_camPos = GLKVector3Make(0.0f, 10.0f, -35.0f); // The camera orbits this point.
m_camDist = 30.0f; // Distance of camera from the orbit point.
/******** Set up open gl ***********/
[self setupGL];
/********* TOUCH IMPLEMENTATION *********/
// Pinch recongizer detects pinches and is used to zoom in/out
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchDetected:)];
[self.view addGestureRecognizer:pinchRecognizer];
// Pan recognizer, used to rotate around the x and y axis
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panDetected:)];
[self.view addGestureRecognizer:panRecognizer];
/********* END TOUCH IMPLEMENTATION *********/
}
如何使UIProgressView在调用viewDidLoad方法后立即显示,并在viewDidLoad方法完成时结束
调用viewDidLoad
时,视图尚未显示在屏幕上。在viewDidLoad
之后,您将看到viewwillbeen
然后调用viewdidbeen
此外,如果您有一个长时间运行的viewdiload
,它将阻止您的主线程,因此您的进度条不会得到更新。当您这样做时:
[self performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:NO];
由于您在主线程上,指定waitUntilDone
将对您的请求进行排队,并且它将在稍后处理,可能是在您的viewDidLoad
完成之后
要做您想做的事情,您将需要更多的异步代码
如何使UIProgressView在调用viewDidLoad方法后立即显示,并在viewDidLoad方法完成时结束
调用viewDidLoad
时,视图尚未显示在屏幕上。在viewDidLoad
之后,您将看到viewwillbeen
然后调用viewdidbeen
此外,如果您有一个长时间运行的viewdiload
,它将阻止您的主线程,因此您的进度条不会得到更新。当您这样做时:
[self performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:NO];
由于您在主线程上,指定waitUntilDone
将对您的请求进行排队,并且它将在稍后处理,可能是在您的viewDidLoad
完成之后
要执行您想要执行的操作,您将需要更多的异步代码。viewDidLoad在主循环、主线程上执行。这就是用户界面线程。界面上的任何更改在结束后都不会显示。所以,这是正常的行为 选择器updateProgressBar将在viewDidLoad在同一线程(主线程)上结束后执行
仅将viewDidLoad用于初始化,然后在后台线程上执行进程,并在主线程(即接口线程)上执行progressView更改。viewDidLoad在主循环、主线程上执行。这就是用户界面线程。界面上的任何更改在结束后都不会显示。所以,这是正常的行为 选择器updateProgressBar将在viewDidLoad在同一线程(主线程)上结束后执行 仅在初始化时使用viewDidLoad,然后在后台线程上执行process,并在主线程(即接口线程)上执行progressView更改。在主线程(默认)上添加: 这将给主循环一次快照,然后返回到您的代码。在主线程(默认)上添加:
这将给主循环一个快照,然后返回到代码。它是放在其他所有元素之上(使用bringtofront),还是通过故事板?它是放在所有其他元素之上的?在您添加ProgressView的地方,即在xib中?它是放在其他所有元素之上(使用bringtofront),或者通过故事板?它被放置在所有其他元素上,您在其中添加了ProgressView,即在xib中?