1

編集:

CoreText を再実装する仕事をしていると想像してください。

コードポイントの順序付きリストである NSString と、基本的に CGPathRef のリストである一連のグリフ (NSFont/CTFont) を取得します。

その中間の何かがレイアウトを担当しています。

また、ある種の環境では、レンダリング先の CGGraphicContext を提供する必要があります。

表示するオブジェクトの種類CGPath です。CGPath ごとに 1 つの UIView を作成するのが心配です! テキストのブロックの場合、文字グリフごとに UIView を作成しませんよね?


一度に描画する (小さな) オブジェクトのセットが大きくなる可能性があります。1000年代に。多くは、スクロールして表示されるまで画面外になります。

私の最善の策は、それぞれに 1 つの UIView を作成することです。その理由は次のとおりです。

  • 適切なタイリングを使用すると、ほとんどの場合、画面外にあるビューがメモリ内にさえなく、必要なときに生き生きと表示されるようにすることができます

  • さらに重要なことは、ズームするときに、そのような各ビューのレイヤー contentScale を zoomFactor に設定して、ぼやけた階段ではなく完全な精度が得られるようにすることです

一方、(それ以外の場合は完全に一般的な)親ビューが何千もの子に対してどのように動作するかはわかりません。そのため、「子」が単一のビューの領域になるようにコードを再考したくなります。しかし、その後、そのビューのレイヤー contentScale を設定することを考え始め、ズーム中にメモリを使い果たすことを心配しています: レイヤーの機械が「賢い」かどうか、そのコンテンツのほとんどが巨大なバッキング ビットマップを作成しないようにするかどうかはわかりません。とにかく見えない

どうしよう、ああ、どうしよう。

共有したい経験がある人はいますか?

4

3 に答える 3

2

ほとんどのオブジェクトがいつでも画面に表示されない場合は、画面外のすべてのオブジェクトのビューを作成しない方がよいでしょう。表示されているオブジェクトだけにビューをインテリジェントに追加し、画面外に出たときにビュー階層から削除する必要があります。これを簡単にするために使用できるかもしれませんUICollectionView-非常にうまく設計され、効率的で、柔軟で、使いやすく、カスタマイズも簡単です-しかし、ズームで機能するかどうかはわかりません.

すべてを 1 つのビューで描画することに決めた場合、深いズームを使用して、 を確認する必要がありますCATiledLayer。非常に深くズームインするように設計されています。AppleMKMapViewはこれを裏で使用して、ビューポートを地球サイズから (比較的) 数平方メートルまで縮小することをサポートしています。

于 2013-06-25T05:35:26.563 に答える
1

私は最近、ほとんどが画像ビューである UIView として実装された何百ものスプライトを含むゲームのプレゼンテーションを見ました。パフォーマンスは、古い世代と最近の世代の iPad の両方で優れていました。彼のコードはhttps://github.com/bentford/ButtonWars/で入手できるので、パフォーマンスがニーズを満たしているかどうかをテストすることをお勧めします。

多くの場合、ビューは重みのあるものであるという仮定がありますが、経験はそれを裏付けていません.

于 2013-07-02T03:56:48.323 に答える
1

iOS バージョンの制限により UICollectionView を使用できず、UIScrollView でビューを使用することに関心がある場合は、このクラスを参照してください。UITableview と同じ方法で使用されます。ビューの数を渡すだけで、ビューが再利用されます。Readme を参照できます。その非常に簡単です。

于 2013-06-25T07:15:53.257 に答える