5

iOS のホーム画面を編集するときと同じように、UIView を揺さぶるコードがいくつかあります。

このぐらつき効果を実現するには、次の 2 つの方法があります。

- (void)wobble {
 int amountInRadians = (self.tag % 2) == 0 ? 2.0 : -2.0;
 containerView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(-amountInRadians));

 [UIView animateWithDuration:0.10 
        delay:0.0 
      options:(UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)
      animations:^ {
       containerView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, RADIANS(amountInRadians));
      }
      completion:NULL
 ];
}

- (void)stopWobble {
 [UIView animateWithDuration:0.01
        delay:0.0 
      options:(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveLinear)
      animations:^ {
       containerView.transform = CGAffineTransformIdentity;
      }
      completion:NULL
  ];
}

ぐらつきを止めると、警告が表示されます (何度も):

-[UIApplication beginIgnoringInteractionEvents] オーバーフロー。無視。

次に(何度も、一致する数の開始のもの):

-[UIApplication endIgnoringInteractionEvents] が -beginIgnoringInteractionEvents と一致せずに呼び出されました。無視。

一体何が起こっているのですか?stopWobble アニメーションをコメントアウトすれば問題ありませんが、当然、アニメーションは停止しません。アニメーションを開始するときに「UIViewAnimationOptionAllowUserInteraction」オプションを削除すると、beginIgnoringInteractionEvents警告が表示されますが、これらのビューがぐらつきながら操作する必要があるため、これも良くありません。

動作は正常に機能するので、これを無視する必要がありますか? 何が原因かを突き止めることができれば、修正する必要があるように思えます。

4

2 に答える 2

11

UIViewAnimationOptionAllowUserInteraction を stopWobble に追加してみてください。以前にそのエラー メッセージが表示されたことがありますが、明示的に設定されていないときに同時に実行しようとしている 2 つのアニメーションに関係しているようです。UIViewAnimationOptionAllowUserInteraction を 2 番目のアニメーションに追加すると、この問題が解決されました。

于 2010-11-17T05:54:44.363 に答える
0

viewDidAppearのカスタムビューのグリッドのように、同時にアニメーション化されるビューが多すぎる場合に発生すると思います。

a。iOS4では、それらはすべて同時にUIApplicationの相互作用を無効にしようとし、問題を回避するためにUIApplicationがオーバーフローし、それらの一部を無視します。

b。すべてのビューをアニメーション化した後、UIApplicationに対話を有効にするように再度指示しますが、UIApplicationは、(a)で無視されたため、一部の有効化呼び出しを認識しません。

于 2012-05-24T00:23:13.407 に答える