asynchronous函数执行?

在我的iOS应用程序中,我执行以下操作。

viewDidAppear(){ // Load a spinner in a view on the top [DSBezelActivityView newActivityViewForView:self.view]; // Execute code that require 3 seconds ... // Stop the spinner [DSBezelActivityView removeViewAnimated:YES]; } 

问题是微调不出现,因为CPU正在努力(类似的东西)。 这就像开始和停止之间的代码优先于视图的渲染。

我很想find一种方法来有效地显示微调的开始,而不使用计时器来延迟代码执行。

谢谢

如果你有类似的方法

 -(void) showSpinner:(UIView*)view { dispatch_async(dispatch_get_main_queue(), ^{ [DSBezelActivityView newActivityViewForView:view]; }); } 

有几种方法可以从不同的线程调用它。 从以下select一个:

 [NSThread detachNewThreadSelector:@selector(showSpinner:) toTarget:self withObject:self.view]; // or [self performSelectorInBackground:@selector(showSpinner:) withObject:self.view]; // or NSInvocationOperation *invOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(showSpinner:) object:self.view]; NSOperationQueue *opQueue = [[NSOperationQueue alloc] init]; [opQueue addOperation:invOperation]; // or dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self showSpinner:self.view]; }); 

按Alt +点击查看详情。

将开始和停止活动指示器之间的代码移动到单独的线程中,因为它阻止了主线程。 这就是为什么活动指标没有显示。

编辑: 例子

我同意第一个答案和几个修改。 我刚刚经历了这个完全相同的问题。 问题是任何graphics都会自动移动到后台更新,当你有代码需要时间才能通过。 把微调扔到背景是无论如何,它是无形的。 你想要的是(可悲的是)你的主代码在后台运行,微调运行在前台。 我知道这听起来很糟糕,但在某些情况下,允许您的代码运行得慢一些,以指示应用程序正在做一些有用的事情对用户有益。

为了让微调工作:1)采取所有需要3秒运行的代码,并把它放到一个无效函数2)实例化你的微调,但存储到一个variables,可以访问您的viewDidAppear例程。 3)启动一个新的NSTimer,并以每四分之一秒左右的增量连续运行。 我将定义在每个周期之后调用的例程。 4)使用performSelectorInBackgroundfunction调用在步骤1中创build的例程。 这基本上是现在将在后台运行你的启动(3秒的价值),这是真正的唯一方法,让animation微调显示和真正的animation。 5)在步骤1中创build的例程中,在顶部添加一行代码,将一个(全局对象)布尔值更新为true,表示我们正处于主要3秒例行程序的中间。 6)在步骤1中定义的例程结束时,添加一行代码,将在步骤5中定义的同一个全局设置为false,表示我们的3秒例程已完成。 7)在计时器例程中,我们现在想做一些如下所示的事情:

 // If busy that start the spinner if(YES == busy){ [spinner startAnimating]; }else{ [spinner stopAnimating]; // Here we can also stop and deallocate the timer } 

如果你需要更多的援助,我确实可以提供确切的代码。 看看我为Pepperdine News Group开发的示例应用程序。 当你按下一个button时,微调器出现在屏幕的右上angular。

http://itunes.apple.com/us/app/pepperdine-graphic-for-iphone/id516343215?mt=8