我有一个只在计算过程中显示进度的视图控制器。我把方法调用
viewDidLoad
中的但问题是视图只在计算完成后才会出现!怎么
我可以在屏幕上显示视图后自动启动计算吗?
答案 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上的完整列表。