2

私のアプリには、「メイン」ビュー、カスタム サム スティック コントロール、およびいくつかのボタンがあります。メイン ビューには追加の CALayer が定義されており、そのコンテンツはストリーミングされた画像で常に更新されます。いくつかのコード:

draw メソッドを繰り返し呼び出すように CADisplay リンクを設定します。

displayLink_ = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawSublayers)];
[displayLink_ setFrameInterval:2];
[displayLink_ addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

メソッドdrawSublayersはCGImageを次のように描画します

  CGImageRelease((__bridge CGImageRef) imageLayer_.contents);
  [imageLayer_ setContents:(id)self.cameraImage_.CGImage];

問題は、サム スティックやその他のコントロールがすべて非常に遅いことです。これは、背景画像の描画が十分なプロセッサを消費するため、mainRunLoop が引きずられて追いつかなくなるためです。私が読んだすべての投稿は、UI の更新を別のスレッドに移動しても機能しないことを示唆しています (独立したテストでこれが確認されました - メソッドは起動しますが、描画は行われません)。

何か案は?背景画像は優先事項ではありません。つまり、描画に時間がかかることは気にしません。UIの残りの部分に干渉したくないだけです。

4

1 に答える 1

2

図面をメイン スレッドから移動します。performSelectorinBackground:

http://www.chrisumbel.com/article/asynchronous_iphone_nsthread_nstimer

于 2012-04-13T13:50:18.747 に答える