4

さまざまな理由から、CATiledLayerの独自の実装を検討しています。調査を行いましたが、CATiledLayerがどのタイルを提供するかをどのように認識しているかを理解できないようです。たとえば、レイヤーをスクロールすると、setPosition:またはsetBounds:が呼び出されることはありません。バックグラウンドスレッドがトリガーなしでデリゲートのdrawLayer:inContext:を呼び出しているように見えます。CATiledLayerが「CAImageProvider」のインスタンスを使用してsetContent:を呼び出し、drawLayer:inContext:へのすべての呼び出しがそのクラスから発生していることがわかりました。したがって、おそらくそれが、どのタイルを描画するかを決定する際の鍵となります。しかし、そのクラスに関するドキュメントは見つかりません。

だから...誰かがこれがどのように機能しているか、そして私がそれをどのようにオーバーライドできるか知っていますか?

CATiledLayerの欠点について:

  • 常に画面解像度(またはx2、x4など)を使用します。ソース画像のネイティブ解像度に設定することはできません
  • 2以外のスケーリング係数を指定することはできません
  • levelOfDetailとlevelsOfDetailBiasを指定する必要がありますが、実装上の理由はまったくわかりません。フラクタルのように無限にスケーラブルなコンテンツがある場合、これは非常に制限されます。
  • 最も重要なこと:一方向のみのズームに制限すると(setTransform :で一方向の倍率を1に強制することでこれを行います)、すべて奇妙に動作します
4

1 に答える 1

1

ではdrawLayer:inContext:、 を使用してバウンディング ボックスを取得できますCGContextGetClipBoundingBoxCGContextGetCTM現在の解像度に関する情報を提供する必要があります。

于 2011-09-09T13:31:24.387 に答える