1

画面に 2 つの 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 は、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 メッセージと重なって、両方のメッセージが同時に画面に表示されるようです。

何が欠けているのか、メッセージを次々と受け取るにはどうすればよいのか教えてください。

あなたの助けに感謝します。

ありがとう、マイク

4

3 に答える 3

2

問題は、これらの HUD が表す 2 つのプロセスが次々と急速に発生している間に、メッセージを (コンピューター用語で) かなり長い時間 (コンピューター用語で) 連続して表示する必要があることです。

メソッドsaveCartNotificationは、目的のテキストを表示するために使用している HUD の単一のインスタンスを準備します。その直後にuserLogOut、HUD を独自のメッセージに置き換えるメソッドをトリガーします。

したがって、現在考えられる可能性は 2 つあります。

  1. 保存が非常に速いという事実により、そのステップの HUD を完全に取り除くことができます。必要に応じて、ログアウトによって表示されるテキストを調整して、カートが保存されていることをユーザーに知らせることができます。
  2. 最初の HUD が消えたときにのみ、ログアウトをトリガーします。MBProgressHUDと呼ばれるメソッドがあり- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completionます。最初のブロックでは、保存を行い、バックグラウンド スレッドで実行されているため、ブロックNSThread sleepForTimeInterval:内でベースとなる遅延を使用して、メッセージをしばらく画面に残すことができます。次に、完了ブロックでログアウトをトリガーします。こうすることで、呼び出しを効果的にシリアル化し、両方の HUD をしばらく画面に表示したままにできます。

ただし、アプリでこのフローが使用される頻度によっては、最初のメッセージが消えるまで待たなければならないことが、経験豊富なユーザーにとって煩わしい場合があります。メッセージごとに 5 秒ではなく 2 秒の遅延があれば、おそらく問題ないと思います。

于 2013-03-20T08:59:45.877 に答える