2011-09-09 5 views
4

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

誰かがこれがどのように動作しているか、どのように私がそれを無効にできるかもしれないか分かっていますか? CATiledLayerの欠点については

  • が、それは常に画面の解像度(または2倍、4倍、など)を使用しています。
  • 他の倍率を指定することはできません。2
  • これは、実装の理由が全くわからないlevelsOfDetailとlevelsOfDetailBiasを指定する必要があります。フラクタルのように無制限にスケーラブルなコンテンツがある場合、これは非常に限定的です。
  • 最も重要なこと:あなたが一方向のみにズームに制限した場合(私は:)のsetTransform中1へ1つの方向のスケール係数を強制することにより、それがdrawLayer:inContext:
+0

@fishiear:あなたの質問からしばらくありましたか?私は本当に同じ問題を抱えています。あなたはそれを解決しましたか?私はズームファクタ3を達成しなければならず、私自身の解決策も探しています。しかし、それが良いのか分かりません。ついに何をしましたか?私はあなたと連絡を取りたいと思います。あなたは私にメールを書くことができます。それは私のために非常に重要です。 – Fab1n

+0

@ Fab1n私はこの特定の問題を解決しませんでした。私が最後にしたことは、表示されたコンテンツが変更されることがわかっているたびに(ズームとスクロールの後、新しいコンテンツが利用可能になったとき)、明示的にタイルレイヤの実装に通知することです。私はコードをあなたと共有することができます、私にあなたの電子メールアドレスを残す。 – fishinear

+0

あなたの迅速な対応に感謝します。私の電子メールアドレスは私のドットコムでrenneronlineです。 Wowはコードを感謝します。それは私に多くの時間を節約すると思う。 – Fab1n

答えて

1

すべての奇妙作用することを行う、ことができますCGContextGetClipBoundingBoxを使用して境界ボックスを取得します。 CGContextGetCTMは、現在の解像度に関する情報を提供する必要があります。

+0

ありがとう、しかし、私は知っています。私はcatiledlayerが私にdrawlayerをいつ送信するかを知っている情報を探しています:incontextメッセージ。 – fishinear

関連する問題