1

我有一个视图控制器,它只显示计算过程中的进度。我把方法调用

viewDidLoad但问题是视图只有在计算完成后才会出现!如何

视图出现在屏幕上后,我可以自动启动计算吗?

4

3 回答 3

5

You may use GCD. Here is Raywenderlich tutorial

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        //Calculations
        dispatch_async(dispatch_get_main_queue(), ^{
            //Update UI must be here
        });
    });
}
于 2013-03-22T18:41:21.270 回答
2

viewDidLoad:加载视图时触发。这与显示视图时不同。

尝试在- (void)viewDidAppear:(BOOL)animated回调方法 中开始计算UIViewController


如果这些计算需要一段时间,请考虑在后台线程上运行它们。这将防止 UI 在计算运行时锁定。这不仅允许视图显示,而且可以在用户等待时与之交互。

[self performSelectorInBackground:@selector(doCalc)
                       withObject:nil];

通过该doCalc方法,您将使用结果回调主线程。

[self performSelectorOnMainThread:@selector(didCalcValue:)
                       withObject:result
                    waitUntilDone:NO];
于 2013-03-22T18:36:58.897 回答
2

正如其他人正确指出viewDidAppear的那样,让您知道视图何时出现在屏幕上。super*另外,使用这些事件方法时不要忘记调用。

例子:

// Tells the view controller that its view was added to the view hierarchy.

- (void)viewDidAppear:(BOOL)animated
{
  // makes sure it's also called on the superclass
  // because your superclass may have it's own code
  // needing to be called here
  [super viewDidAppear:animated];

  // do your calculations here

}

常用的 UIViewController 事件:

– (void)viewDidLoad

当您的视图首次加载到内存中时调用。

– (void)viewDidAppear:

在您的视图出现在屏幕上后调用。

– (void)viewWillDisappear:

在您的视图从屏幕上消失之前调用。

请参阅UIViewController 类参考页面上的完整列表。

于 2013-03-22T19:04:24.190 回答