仅在视图出现后自动开始计算

时间:2013-03-22 18:33:05

标签: iphone ios objective-c uiviewcontroller viewdidload

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

viewDidLoad中的

但问题是视图只在计算完成后才会出现!怎么

我可以在屏幕上显示视图后自动启动计算吗?

3 个答案:

答案 0 :(得分:5)

您可以使用GCD。这是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
        });
    });
}

答案 1 :(得分:2)

加载视图时会触发

viewDidLoad:。这与显示视图时不同。

尝试使用- (void)viewDidAppear:(BOOL)animated上的UIViewController回调方法开始计算。


如果这些计算需要一段时间,考虑在后台线程上运行它们。这将阻止UI在计算运行时锁定。这不仅可以让视图显示,还可以在用户等待时进行交互。

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

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

[self performSelectorOnMainThread:@selector(didCalcValue:)
                       withObject:result
                    waitUntilDone:NO];

答案 2 :(得分: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 Class Reference page上的完整列表。