MBProgressView睡眠用于混合视图

时间:2012-07-20 14:16:25

标签: ios mbprogresshud

我正在尝试在我的应用中显示混合的HUD,例如,当用户点击“登录”时,我希望我的HUD显示微调器说“登录...”,然后更改为复选标记图像说“登录!”,然后隐藏。我正在尝试使用以下代码完成此操作:

MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
HUD.labelText = @"Logging in";
\\Do network stuff here, synchronously (because logging in should be synchronous)

\\ Then upon success do:
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Logged in!";
sleep(2);
[MBProgressHUD hideHUDForView:self.view animated:YES];

问题在于,sleep(2)是应用于初始微调器,而不是复选标记HUD。因此,微调器显示较长时间,并且在一瞬间后复选标记消失。如何在HUD隐藏之前将复选标记保留在那里较长时间?

谢谢!

2 个答案:

答案 0 :(得分:1)

作为最佳做法,请勿使用睡眠。尝试使用“performSelector:withObject:afterDelay”方法。创建一个执行

的方法
[MBProgressHUD hideHUDForView:self.view animated:YES];

操作并在您选择的预定义延迟后调用它。不要忘记你正在处理UI,所以请确保你在主线程上调用它。

答案 1 :(得分:0)

我会创建两个HUD。第一个是“等待”部分,第二个是成功。在网络任务之前启动loadingHUD,并在完成后隐藏它:

MBProgressHUD *loadingHUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
loadingHUD.mode = MBProgressHUDModeIndeterminate;
loadingHUD.labelText = @"Please wait...";
loadingHUD.detailsLabelText = @"Connection in progress";
[loadingHUD show:YES];
// Do the network stuff here
[loadingHUD hide:YES];

在此之后,要通知成功,请根据需要创建successHUD,并在延迟后隐藏它:

MBProgressHUD *successHUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
successHUD.mode = MBProgressHUDModeCustomView;
successHUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]];
successHUD.labelText = @"Logged in !";
[successHUD show:YES];
[successHUD hide:YES afterDelay:2.0];

您的成功HUD将显示2秒钟,并自动隐藏。

这就是我总是使用MBProgressHUD的方式。