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警告が表示されますが、これらのビューがぐらつきながら操作する必要があるため、これも良くありません。
動作は正常に機能するので、これを無視する必要がありますか? 何が原因かを突き止めることができれば、修正する必要があるように思えます。