2013-03-20 137 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方法瞬间覆盖。