2014-02-25 81 views
-6

我要的是等待一定的延遲我的方法開始後的前調用我的忙指示:如何在延遲後調用方法?

  • 如果該方法完成該延遲之前,我忙指示燈會顯示不出來。
  • 如果該方法比我的延遲需要更多時間才能完成。我的繁忙指標會顯示直到方法結束,並在完成時關閉。

感謝您的幫助!

+0

你有任何代碼來取消它顯示你卡在哪裏?一般情況下[你嘗試過](http://mattgemmell.com/what-have-you-tried/)來解決它? – beryllium

+0

你們教給新手一切,而不是他們正在尋找的東西。 – EmptyStack

回答

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)..... 
} 
+0

謝謝,我認爲它會更復雜,但它工作正常。 – neobagram

+0

這不是,感謝塊的魔力:) –

0

對於跳躍開始:

一個可能解決方案是使用一個單次定時器,在操作開始時將被啓動,和火災所需的持續時間之後。計時器的動作是啓動忙指標。

在操作的完成處理程序中,計時器將失效,並且忙指示符將被禁用(隱藏)(如果有的話)。

0

您可以嘗試

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

使用一些布爾變量像jobCompleted來表示你的工作是否完成與否。然後

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

如果你必須表明你的活動指標的方法(我們將其命名爲-(void)showIndicator),你可以做

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

[NSObject cancelPreviousPerformRequestsWithTarget:self];