我有这个方法:
-(IBAction)clickedDone; {
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
spinner.center = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2);
[spinner startAnimating];
//intensive stuff here
}
然而,微调器没有时间(我推测)在密集的东西之后开始,这阻塞了主线程我猜。我想知道在线程被阻止之前是否有办法让这个微调器动画化。重构我的代码以在分离的线程中运行“密集的东西”是太多的工作。我能想到的唯一选择是将“密集的东西”延迟几分之一秒,以便微调器启动。
你们都在想什么?
答案 0 :(得分:3)
我认为你需要把昂贵的东西放在第二个线程上。否则你就像你说的那样阻止了界面。这可能是更多的工作,但这比糟糕的用户体验更好。
答案 1 :(得分:2)
如果主线程未被阻止,则微调器只能旋转。因此,您必须在不同的线程上运行“密集的东西”。此外,为了延迟“密集的东西”,你必须将它添加到线程的操作队列,允许运行循环重新开始。如果您已经在计划中,那么您可以将其放在不同的主题上。
答案 2 :(得分:1)
首先,您需要将其添加到视图中:
[self.view addSubview:spinner];
也许这已经解决了问题。