在我的应用程序中,我有两种方法可以隐藏和显示名为的视图控制器的子视图

 -(void)hideCurrentView
 -(void)showCurrentView


它们总是一起被调用。当调用hideCurrentView时,我想开始显示一个加载屏幕,然后在showCurrentView显示了所有必需的ui元素时隐藏此加载屏幕。我的加载屏幕是一个带有活动指示器作为子视图的视图。问题是我必须执行主线程上的hideCurrentView和showCurrentView中发生的所有操作。这就是为什么我的加载屏幕永远不会显示的原因。 :-(

我试图将show loading screen方法放到后台线程中:

-(void)hideCurrentView {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, (unsigned long)NULL), ^(void) {
        [self showLoadingScreen];
    });
    [self performSelectorOnMainThread:@selector(hideCurrentViewOnMainThread) withObject:nil waitUntilDone:YES];
}

-(void)showCurrentView {
    [self performSelectorOnMainThread:@selector(showCurrentViewOnMainThread) withObject:nil waitUntilDone:YES];
}


那行不通。由于主线程被阻塞,因此加载屏幕永远不会显示。我也尝试过直接在主线程上显示加载屏幕,但是它也无法正常工作。

谁能告诉我hoew在执行ui动作之前先显示加载屏幕,然后在所有ui动作完成后再次隐藏它?

谢谢你的帮助!

最佳答案

如果仅添加子视图,则不应在后台线程中调用showLoadingScreen。 (或更一般地,操作UI)
我猜想您的hideCurrentViewOnMainThread中有一些与UI不相关的东西,并且阻塞了主线程,而这部分代码应该在另一个线程中运行。

关于ios - objective-c -在主线程完全阻塞之前显示加载屏幕,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20887943/

10-11 22:21