2010-11-21 13 views
5

私の状況:私はコンテキスト内で素敵なグラフを描画するGraphクラスを呼び出すUIViewを持つUIScrollViewを作成しました。 これは、幅が8192ピクセルより大きい場合、電話機がUIViewをレンダリングしないことを発見しました。実際、アップル社の文書によると、1024pxよりも大きければCATiledLayerを実装する必要があります。UIScrollViewとCATiledLayerを基礎から

しかし、私は多くのことを読んで、グーグルグーグルで学んだ後、この仕事のためにCATiledLayerの基本を理解することは難しいと思っています。私はQuartz vs. Cocoaとレイヤーとサブレイヤとビューとサブビューを失いました。

私はGraphクラスをそのままにして、コンテキストを完全に描画し、タイルに分割してスクロールするのが理想的です。スクロールビューは水平方向にスクロールするだけで、ズームや垂直スクロールは必要ありません。それは可能ですか?もしそうなら、どうすればいいですか? おそらく誰かが私にアウトライン、いくつかの箇条書きや擬似コード、スクロールビュー、uiview、およびタイリングを使うグラフクラスをどのように再構成すべきかを教えてくれるかもしれません。

ご返信ありがとうございます。

答えて

4

あなたが質問してから1ヶ月が経過していますが、これはまだ使用されている可能性があります。今夜はCATiledLayerを使い始めました。

CATiledLayer *tiled = [CATiledLayer layer]; 
[self.view.layer addSublayer:tiled]; 

、あなたはただ一つの方法の実装、デリゲートを設定していること:

MyTLDelegate *myDelegate = [[MyTLDelegate alloc] init]; 
tiled.delegate = myDelegate; 
// I haven't checked if CATiledLayer retains myDelegate, check this! 

... 
@implementation MyTLDelegate { 

-(void)drawLayer:(CATiledLayer *)layer inContext:(CGContextRef)ctx 
{ 
    CGRect dirtyRect = CGContextGetClipBoundingBox(ctx); 
    // draw! 
} 

、基本的にすべてです私はCATiledLayerの背後にある考え方は、あなたがビューに追加することをあるように思わだと思います座標空間全体がまさにそこにあるかのように描画することができます。したがって、Graphiledクラスをわずかに変更するだけで、CATiledLayerデリゲートとして機能させることができます。私の場合は、20分を費やして、ユーザーエクスペリエンスを何桁も向上させました。 (退屈なスクロール、スケーリング、自分自身の再描画と比べて)

psこれはあなたが求めていた擬似コードに過ぎません。品質および/またはフレームサイズのために。