我有一个视图控制器,它只显示计算过程中的进度。我把方法调用
viewDidLoad
但问题是视图只有在计算完成后才会出现!如何
视图出现在屏幕上后,我可以自动启动计算吗?
我有一个视图控制器,它只显示计算过程中的进度。我把方法调用
viewDidLoad
但问题是视图只有在计算完成后才会出现!如何
视图出现在屏幕上后,我可以自动启动计算吗?
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
});
});
}
viewDidLoad:
加载视图时触发。这与显示视图时不同。
尝试在- (void)viewDidAppear:(BOOL)animated
回调方法 中开始计算UIViewController
。
如果这些计算需要一段时间,请考虑在后台线程上运行它们。这将防止 UI 在计算运行时锁定。这不仅允许视图显示,而且可以在用户等待时与之交互。
[self performSelectorInBackground:@selector(doCalc)
withObject:nil];
通过该doCalc
方法,您将使用结果回调主线程。
[self performSelectorOnMainThread:@selector(didCalcValue:)
withObject:result
waitUntilDone:NO];
正如其他人正确指出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 类参考页面上的完整列表。