私のアプリには、「メイン」ビュー、カスタムサムスティックコントロール、およびいくつかのボタンがあります。メインビューには追加のCALayerが定義されています。このCALayerのコンテンツは常にストリーム画像で更新されます。いくつかは、コード:にCADisplayリンクを設定バックグラウンドが頻繁に更新される遅延UI
が繰り返し私のdrawメソッドを呼び出します。
displayLink_ = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawSublayers)];
[displayLink_ setFrameInterval:2];
[displayLink_ addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
方法drawSublayers
は問題が親指スティックや他のコントロールつまり
CGImageRelease((__bridge CGImageRef) imageLayer_.contents);
[imageLayer_ setContents:(id)self.cameraImage_.CGImage];
としてCGImageを描きますすべて非常に遅れている。これは、バックグラウンドイメージの描画が、mainRunLoopがドラッグダウンして追いつくことができないほど十分なプロセッサを食べるためです。私が読んだすべての投稿は、UIアップデートを個別のスレッドに移動すると機能しないことを示唆しています(独立テストでこれが確認されました。メソッドは起動しますが、描画は発生しません)。
アイデア?背景画像は優先順位ではなく、すなわち、描画するのに時間がかかることは気にしない。私はちょうどそれがUIの残りの部分と干渉しないようにしたい。
(もちろん、原子を!)だけが行う' _imageLayer.contents = <あなたの-property> 'メインスレッドのビット?スローダウンがカメラからの画像を取得しているのか、UIを更新していますか? (私はカメラを疑っています) – deanWombourne
これは、すべてを遅らせるsetContentsの呼び出しです。それは画面の再描画を強制します。これは、他のすべてを遅くするのに十分なCPUを食べます。 – ayrton04
'[imageLayer_setContents:(id)self.cameraImage_.CGImage];を' self.cameraImage_.CGImage'だけに置き換えれば、減速しないでしょうか? – deanWombourne