UIView
リモート通知が来たときに、5秒間画面にカスタムディスプレイを作成しようとしています。
次のようなコード:
//customView.alpha = 1.0 here
[UIView animateWithDuration:1 animations:^{
customView.alpha = 0.3;
}
completion:^(BOOL finished){
// remove customView from super view.
}];
問題と必要なもの
ただし、いくつかの通知が短い時間間隔で来る場合があり、複数customView
が同時にアニメーション化され、1 つが他のものをカバーする場合があります。
これらのアニメーションが競合しないように、次々と実行してほしい。
仮定したが失敗
//(dispatch_queue_t)queue was created in other parts of the code
dispatch_sync(queue, ^{
[UIView animationWithDuration:animations:...];
});
GCD キューでアニメーションを作成した後、GCD を使用しない元のコードと同じ結果が得られました。アニメーションはまだ競合しています。
ところで、 UI を含むアニメーションまたはタスクは常にメイン スレッドで実行する必要があると聞きましたが、2 番目のコードではアニメーションがスムーズに実行されたように見えました。なんで?