前もって感謝します。
Quartz Composerビュー(以下のqcView)があり、QCViewの中央に「ホーム」があることがわかるまで、画像(コードについて疑問がある場合は、アリの画像)をランダムな方向に移動します。アリが1インチずつ動くのを見るには、pauseRenderingが必要です。それがなければ、アリはその「家」に現れるでしょう。
while([self distance] > acceptableOffset){
[qcView pauseRendering];
[self moveTowardsDestination:@"home"];
[qcView resumeRendering];
}
これは、1匹のアリにとっては完全にうまく機能します。
方程式に別のアリを追加するときは、ディスパッチキューと2つのブロックを使用します。
dispatch_async(queue, ^{
[theAnt findCenter];
});
dispatch_async(queue, ^{
[otherAnt findCenter];
});
このコードが実行されると、2人の叔母は同時に自宅に急いで行きます-私たちが探している正確な行動です。ただし、実行を停止して再度ビルドすると、[qcViewpauseRendering]メソッド内のどこかからすぐにExc_Bad_Accessを取得します。Clean&Buildの後、もう1回実行すると完全に機能します。pauseRenderingとresumeRenderingを削除すると、アリはすぐに自宅に現れます。
どうやら、QCView pauseRenderingメソッドにローカルな配列があり、それは絶えず拡大および縮小しており、単一のQCViewとそれにアクセスする複数のブロックを使用すると、問題の根本を確認できます。
QCViewのドキュメントを調べましたが、そこからインスピレーションを得られないようです。pauseRenderingに関するドキュメントは最小限です。誰もこれほどばかげたことを試したことはないと思いますが、誰かがQCViewを実際に変更した経験があり、私を正しい方向に向けることができることを願っています(エラー...「ANY!」を読んでください)。 。
[編集:「while(![qcView isPausedRendering])」のバリエーションを試しましたが、それが役立つ場合は。]