9

Objective-C ベースの iOS アプリのパフォーマンスの問題について助けを求めています。

CALayer の renderInContext メソッドを使用して画面のコンテンツをキャプチャする iOS アプリケーションがあります。AVFoundation を使用してビデオを作成するのに十分なスクリーン フレームをキャプチャしようとします。次に、ユーザビリティに関する調査目的で、画面記録を他の要素と組み合わせます。画面がキャプチャされている間、アプリは UIWebView のコンテンツを表示したり、ネットワークを介してデータをフェッチしたりすることもできます。Web ビューのコンテンツは私の制御下にありません。ウェブ。

このセットアップは機能していますが、ご想像のとおり、バターのようにスムーズではありません。レイヤーはメイン スレッドでレンダリングする必要があるため、必要以上に UI の競合が発生します。私がやりたいのは、画面キャプチャよりも UI の応答性を優先するセットアップを行うことです。たとえば、ユーザーが Web ビューをスクロールしている場合、ひどいスクロール エクスペリエンスを経験するよりも、記録にフレームをドロップした方がよいでしょう。

私は、dispatch_source の合体から、フレーム キャプチャ リクエストをメイン キューのブロックとして CADisplayLink に送信するまで、いくつかの手法を試しました。これまでのところ、それらはすべてほぼ同じように機能しているようです。フレーム キャプチャは現在、画面のメイン ビューの drawRect でトリガーされています。

ここで質問したいのは、上記を踏まえて、目標を達成するためにどのようなテクニックを提案しますか? 答えは、素晴らしい答えがないということかもしれませんが、奇抜に聞こえるかもしれませんが、何でも試してみたいと思います。

注: どのような手法でも、App Store に適したものにする必要があります。Display Recorder が使用/使用する CoreSurface ハックのようなものは使用できません。

ご協力いただきありがとうございます!

4

2 に答える 2

1

「レイヤーはメインスレッドでレンダリングする必要があるため」、UIKit に触れない限り、これは当てはまりません。

https://stackoverflow.com/a/12844171/136305をご覧ください

于 2013-01-20T21:03:50.767 に答える
0

要件に適合する場合は、半分の解像度で録画して高速化することもできますか?

于 2013-01-19T18:57:21.053 に答える