2011-08-11 3 views
2

CALayer.contentsプロパティをCGImageRefでバックグラウンドスレッドに設定しても、coreアニメーションスレッドやcontentsバックグラウンドスレッドではなく、メインスレッドループ(UIスレッド)でコアアニメーションがコンテンツイメージを描画することが確認できますか?UIスレッドでCALayer.contentsが描画されていますか?

コアアニメーションが独自のスレッドを実行するのですが、CALayer.contentsプロパティを設定すると、UIスレッドがレイヤリングするように見えますか?

答えて

1

私の経験では、目に見えるレイヤーがあり、バックグラウンドスレッドで内容を設定すると、すぐに描画されない可能性があります。私が使用した溶液は、メインスレッド上)(dispatch_asyncの呼び出しを使用して非同期的にコンテンツプロパティを設定することでした。どこスレッド自体は長いかもしれない。特に

dispatch_async(dispatch_get_main_queue(), ^(void) { 
    layer.contents = (id)myCGImage; 
}); 

、ここに私の例は、GCDを使用してスレッドを扱うためのものですあなたが実行している操作よりも時間がかかります。この場合、割り当てをメインスレッドに置くか、[CATransaction flush]を強制することは、データをユーザに提示することをOSに示す2つの方法です。

それ以外の場合、GCDバックグラウンドスレッドの場合、あなたは長時間(CATransaction flush)を実行していないスレッドの実行ループを利用しています。

+0

これは間違っています。コアアニメーションと私の経験によれば、レイヤのコンテンツプロパティをどこからでも設定すると、それが描画されます。それはあなたのために働いていない理由であるいくつかの他の問題があるかもしれません。 – user859375

+2

[CATransaction flush]と呼ばれるものがない場合は、バックグラウンドスレッドで内容を設定するだけでデータが表示されるまでに時間がかかります。したがって、代わりに、[CATransaction flush]を呼び出すことができます。それ以外の場合、コンテンツは設定されますが、何かがリフレッシュを引き起こすまで表示されません。これには数秒かかることがあります。 – gaige

関連する問題