2013-03-20 34 views
0

我試圖在屏幕上一個接一個地顯示2 MBProgressHUD消息。我發現第二條消息與第一條消息重疊,而不是串行顯示。這就是我要做的:MBProgressHUD - 2個連續的消息重疊

我有一個註銷按鈕點擊的時候觸發這一點,並稱之爲「saveCartNotification」

- (IBAction)logout:(id)sender { 
    [self saveCartNotification]; 
} 

「saveCartNotification」的帖子有5秒的延遲MBProgressHUD,然後調用「 userLogOut」

- (void)saveCartNotification{ 
    self.hud = [[MBProgressHUD alloc] initWithView:self.view]; 
    self.hud.labelText = @"Saving your cart.."; 
    self.hud.mode = MBProgressHUDModeIndeterminate; 
    self.hud.dimBackground = YES; 
    self.hud.animationType = MBProgressHUDAnimationFade; 
    [self.view addSubview:self.hud]; 
    [self.hud show:YES]; 
    [self.hud hide:YES afterDelay:5]; 
    [self.hud show:YES]; 
    self.hud.labelText = @"Saving Cart and Favorites"; 
    [self.hud hide:YES afterDelay:5]; 

//Logout 
[self userLogOut]; 

}

userLogOut現在張貼另一個MBProgressHUD消息具有5秒的延遲:

- (void)userLogOut{ 
    self.hud = [[MBProgressHUD alloc] initWithView:self.view]; 
    self.hud.labelText = @"Logging out securely"; 
    self.hud.mode = MBProgressHUDModeIndeterminate; 
    self.hud.dimBackground = YES; 
    self.hud.animationType = MBProgressHUDAnimationFade; 
    [self.view addSubview:self.hud]; 
    [self.hud show:YES]; 
    [self.hud hide:YES afterDelay:5]; 
} 

由於我連續使用這些方法,我的預期的行爲是:

1)MBProgressHUD消息從 「saveCartNotification」 2)上述消息停留在5秒鐘消失 3)MBProgressHUD消息來自「 userLogOut」 4)上述消息再次停留在5秒鐘消失

但正在發生的事情是兩個消息似乎都在屏幕上,同時與MBProgressHUD消息‘userLogOut saveCartNotification’重疊MBProgressHUD消息‘’。

您能否讓我知道我錯過了什麼,以及我需要怎樣做才能讓我的消息依次連續發送。

非常感謝您的幫助。

謝謝, 邁克

+0

我想你需要'MBProgressHUD' – tGilani 2013-03-20 06:32:08

回答

2

問題在於,當這些HUD要表示的兩個進程相繼發生時,您希望消息連續出現並持續較長時間(以計算機方式)。

您的方法會準備您正在用來顯示所需文本的HUD的單個實例。然後,立即觸發userLogOut方法,用它自己的消息代替HUD。

因此,有兩種可能性,我能想到的現在:

  1. 由於事實,即儲蓄是非常快的,你擺脫了HUD的該步驟完全。如果您願意,您可能需要以某種方式調整註銷顯示的文本,以通知用戶有關已保存的購物車。
  2. 只有當第一個HUD消失時纔會觸發註銷。 MBProgressHUD上有一個叫做- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion的方法。在第一個模塊中,您將執行保存操作,因爲它在後臺線程中運行,所以在其中使用一些基於NSThread sleepForTimeInterval:的延遲將消息留在屏幕上一段時間。然後在完成塊中觸發註銷。這樣,您可以有效地序列化呼叫,從而使兩個HUD在屏幕上保持一段時間。

但是,根據您的應用使用此流的頻率,可能會讓更有經驗的用戶不得不等待第一條消息消失,這可能令人討厭。我想,你可能會做的不是5,但也許每個消息延遲2秒。

+0

+1的單獨實例作爲備用建議。通知(警報)5秒太長。 – viral 2013-03-20 09:12:07

+0

@Daniel Schneller - 像魅力一樣工作。感謝您的提示! – 2013-03-21 03:02:40

1

通過這一個打電話給你的userLogOut

[self performSelector:@selector(userLogOut) withObject:nil afterDelay:5]; 

你必須這樣做,因爲你是給特定的時間到MBProgressHUD爲隱藏。

希望這有助於快樂編碼。

0

無論是創建MBProgrressHUD兩個單獨的實例或更改註銷調用

[self performSelector:@selector(userLogOut) withObject:nil afterDelay:5]; 

既然你調用兩種方法依次&使用的MBProgressHUD相同情況下,第一個警報由userLogout方法瞬間覆蓋。