如何在延迟后调用方法?

时间:2014-02-25 08:16:26

标签: ios delay

我想要的是在调用忙碌指示符之前等待我的方法开始后的某个延迟:

  • 如果方法在延迟之前完成,我的忙指示符将不会显示。
  • 如果方法花费的时间超过我的延迟时间。我的忙指示符将一直显示到方法结束,并在完成时关闭。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

你可以尝试:

有一个名为completed的bool属性。

perform selector after delay //(some selector showBusy, some delay)
completed = NO;
dispatch_queue_t myqueue = dispatch_queue_create("queue", NULL);
dispatch_async(myqueue, ^{
        //your long time operation (must not do any UI changes here)
        dispatch_async(dispatch_get_main_queue(), ^{
         //UI here 
         completed = YES;  
         hideBusy;
        });
    });

-(void)showBusy{
    if(!completed).....
}

答案 1 :(得分:0)

跳跃开始:

可能的解决方案是使用一次性计时器,该计时器将在操作开始时启动,并在所需的持续时间之后触发。计时器的动作是启动忙指示器。

在操作的完成处理程序中,计时器将无效,忙指示符将被禁用(隐藏),如果有的话。

答案 2 :(得分:0)

你可以尝试

[self performSelector:@selector(showIndicator) withObject:nil afterDelay:1.0];

使用一些BOOL变量(如jobCompleted)来指示您的工作是否完整。然后

 - (void)showIndicator
{
    if(jobCompleted)return;
    ....
}

答案 3 :(得分:0)

如果您有方法来显示您的活动指示器(让我们将其命名为-(void)showIndicator),您可以

[self performSelector:@selector(showIndicator) withObject:nil afterDelay:delay];

并使用

取消它
[NSObject cancelPreviousPerformRequestsWithTarget:self];