ios - MBProgressHUD - 2 个连续的消息重叠

标签 ios objective-c mbprogresshud

我试图在屏幕上一个接一个地显示 2 MBProgressHUD 消息。我发现第二条消息与第一条消息重叠,而不是连续出现。这就是我想要做的:

我有一个注销按钮,点击它会触发它并调用“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 现在发布另一条延迟 5 秒的 MBProgressHUD 消息:

- (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) 来自“saveCartNotification”的 MBProgressHUD 消息 2) 以上信息持续5秒后消失 3) 来自“userLogOut”的 MBProgressHUD 消息 4) 上面的信息再次停留5秒后消失

但是发生的事情是两条消息似乎同时出现在屏幕上,来自“userLogOut”的 MBProgressHUD 消息与来自“saveCartNotification”的 MBProgressHUD 消息重叠。

能否请您告诉我我缺少什么以及我需要做什么才能一个接一个地连续接收我的消息。

非常感谢您的帮助。

谢谢, 迈克

最佳答案

问题是您希望消息连续出现并持续相当长的时间(以计算机术语来说),而这些 HUD 所代表的两个过程却一个接一个地快速发生。

您的 saveCartNotification 方法准备您正在使用的 HUD 的单个实例来显示所需的文本。然后,您立即触发 userLogOut 方法,用自己的消息替换 HUD。

所以我现在能想到的有两种可能:

  1. 由于保存速度非常快,您可以完全摆脱那一步的 HUD。如果您愿意,您可能希望以某种方式调整注销时显示的文本,以通知用户已保存的购物车。
  2. 只有当第一个 HUD 消失时,您才会触发注销。 MBProgressHUD 上有一个名为 - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion 的方法。在第一个 block 中,您进行了保存,并且可以 - 因为它在后台线程上运行 - 在其中使用一些基于 NSThread sleepForTimeInterval: 的延迟来在屏幕上保留消息一段时间。然后在完成 block 中触发注销。这样您就可以有效地序列化调用,使两个 HUD 都在屏幕上保留一段时间。

但是,根据此流程在您的应用中使用的频率,更有经验的用户可能会很烦不得不等待第一条消息消失。我认为,每条消息的延迟不是 5 秒,而是 2 秒,你可能会做得很好。

关于ios - MBProgressHUD - 2 个连续的消息重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15516689/

相关文章:

ios - 从 Objective-C block 中修改存储在实例变量中的信号量

objective-c - 在窗口的拖动区域上显示图像...如何才能单击图像仍然拖动窗口?

ios - 如何在iOS中添加MBProgressHUD等待加载数据

ios - MBProgress HUD 没有显示正确的模式总是默认模式

ios - MBProgressHUD 不显示

objective-c - Xcode iOS 界面生成器

ios - 如何在 swift 中的 do 函数中为字符串添加 +1 以进行分页

ios - VOIP 服务证书的用途是什么?

objective-c - RestKit 对象映射与奇怪的 JSON

objective-c - XCode UITesting 检查文本字段是否存在