1

このSO回答UIKitに従ってメッセージを遅らせています

SSHUDViewここで、メソッド呼び出しをキューに入れるだけでなく、 のキューも処理する必要があるという別の要件が生じましUIAlertViewた。たとえば、1 つのシナリオとして、hud を表示し、1 秒後に別の hud を表示し、最後に 1 秒後にUIAlertView.

問題は、SSHUDViews が表示されるときにバックグラウンド スレッドで非同期に実行されるためUIAlertViewSSHUDViews の表示が完了していないためUIAlertView、hud がオーバーレイされることです。

基本的に、メソッドがクラスであろうSSHUDViewUIAlertView.. 個々のメッセージを遅らせることができるフィードバック キュー。

4

2 に答える 2

1

あなたが話していることは、セマフォにぴったりのように聞こえますディスパッチセマフォを使用して有限リソースの使用を規制するという見出しの下を参照してください)!UIViewリンク先の SO Answer を見ましたが、アニメーションのケースは解決しないと思います。セマフォの使用方法は次のとおりです。

ビュー コントローラーでインスタンス変数を追加し、メソッドdispatch_semaphore_t _animationSemaphore;で初期化します。- init

- (id)init
{
  if ((self = [super init])) {
    _animationSemaphore = dispatch_semaphore_create(1);
  }
  return self;
}

- dealloc(を使用してメソッド内のセマフォを解放することを忘れないでくださいdispatch_release。また、 を使用してキューに入れられたアニメーションが終了するのを待ちたいと思うかもしれませんがdispatch_semaphore_wait、それはあなたが理解できるように残しておきます。)

アニメーションをキューに入れたいときは、次のようにします。

- (void)animateSomething
{
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    dispatch_semaphore_wait(_animationSemaphore, DISPATCH_TIME_FOREVER);
    dispatch_async(dispatch_get_main_queue(), ^{
      [UIView animateWithDuration:0.5 animations:^{
        // Your fancy animation code
      } completion:^(BOOL finished) {
        dispatch_semaphore_signal(_animationSemaphore);
      }];
    });
  });
}

テンプレートを使用して、や- animateSomethingを表示するなど、さまざまなことを実行できます。SSHUDViewUIAlertView

于 2012-12-18T16:49:54.553 に答える
0

あなたが説明していることは、アニメーションのように聞こえます。UIView アニメーションを使用して、一連のアニメーション ブロックをチェーンしてみませんか。

[UIView animateWithDuration:2
     animations:^{
         // display first HUD
     }
     completion:^(BOOL finished){
         [UIView animateWithDuration:2
              animations:^{
                  // hide first HUD, display second HUD
              }
              completion:^(BOOL finished){
                  [UIView animateWithDuration:2
                       animations:^{
                           // hide second HUD, show UIAlert
                       }
                       completion:nil
                   ];
              }
          ];
     }
 ];
于 2012-12-12T06:32:36.387 に答える