2009-07-20 9 views
1

申し訳ありませんが、私はUIViewを表示しています。これは幅がかなり広いCGPathです。これは水平方向にUIScrollView内でスクロールすることができます。今は、CATiledLayerというビューを使用しています。なぜなら、それは1024ピクセル以上の幅だからです。大きなCGPathを描画する最も効率的な方法は何ですか?

私の質問です:これは効率的ですか?

- (void) drawRect:(CGRect)rect { 
    CGContextRef g = UIGraphicsGetCurrentContext(); 
    CGContextAddPath(g,path); 
    CGContextSetStrokeColor(g,color); 
    CGContextDrawPath(g,kCGPathStroke); 
} 

基本的に、レイヤー内のタイルが描画されるたびに、全体のパスを描画しています。誰かがこれが悪い考えであるかどうかを知っていますか、クリッピング矩形内にあるパスの部分だけを描くことに関しては比較的スマートなCGContextですか?

パスの大部分は、サイズと形状がタイルと似ているブロックに分割することができるように設定されていますが、私の部分ではもっと多くの作業が必要になります。 (タイルの境界を横切る形状の場合)、描画するパスを見つけるために何らかの計算が必要になります。

この方向に移動する価値があるのですか、またはCGPathは既に比較的早く描画していますか?

答えて

3

必要に応じて、Quartzは描くすべてのCGContextを描画するCGContextのサイズに対してクリップする必要があります。ただし、そのタイル内に表示されているジオメトリだけを送信すると、CPUを節約できます。タイルごとに1つずつ、複数のパスを用意することでこれを行う場合、タイルを描画するたびにQuartzと比較して、一度(複数のパスを作成すると)そのクリッピングを行うことを話しています。効率の向上は、あなたのパスがどのくらい複雑になるかということになります。もしそれが国道ネットワークのベクトル描写地図であれば、それは巨大になる可能性があります!もちろん、コードの複雑さが増していることから、このスピードアップを切り離す必要があります。

クエストが狂った最適化を行う前に、楽器を使ってQuartzでどれくらいの時間を費やしているかを確認することができます。

関連する問題