2009-04-10 12 views
2

私はQuartz2dの新機能ですので、これは簡単な質問です。Quartz2Dとクリッピング - この描画ルーチンを最適化しますか?

コンテンツフレームが1024x768のスクロールビューがあります。この中で、Quartz2dを使って描画を行うカスタムビュー(フレーム1024x768)をプッシュします。アイデアは、私は、ユーザーがさまざまな部分を見るためにスクロールすることができる広い領域を持っています。

問題は、デバイスをスクロールするとメモリの警告エラーやひどいスクロールのパフォーマンスが発生することです。 1024x768フィールド全体を再描画しているので、これは間違いありません。私は、UIScrollViewオフセットへのクリッピングパスを設定することは助けとなると思っていました。スクロールするまでは..スクロールするまでスクロールしません。 scrollViewDidScroll中に描画するビューを指示すると、パフォーマンスが低下する

誰かが私の描画ルーチンを最適化する方法を教えていただけますか?

私がマスクされつつある、との両方が画面にペイントさそのうちの一つ二つの画像...(他の上に1)あなたが提供できるすべての助けを事前に

- (void)drawRect:(CGRect)dirtyRect {

CGContextRef myContext = UIGraphicsGetCurrentContext(); 


// get our offset (where we've scrolled to) 
CGPoint offset = scrollView.contentOffset; 

    // clip to our offset.. uncomment for good performance but terrible scrolling 
//CGContextClipToRect(myContext, CGRectMake(offset.x, offset.y, 480, 320)); 


// make an image from the mask context 
CGImageRef aMaskImage = CGBitmapContextCreateImage (myMaskContext); 

// mask the first image 
CGImageRef aImage = CGImageCreateWithMask(myImageRef1, aMaskImage); 

CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), myImageRef1); 
CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), aImage); 


CGImageRelease(aImage); 
CGImageRelease(aMaskImage); 

}

感謝を持っています!

答えて

0

一般に、大きなものをスクロールするのを最適化するには、CATiledLayerを調べます。

+0

ありがとうございました。私はもうこれを見る時間がありませんでしたが、私は答えとしてこれを唯一のものとして与えており、妥当と思われます。 :) – dev

+0

私は他の答えは、dirtyRect引数を観察することですが、私はCATiledLayerが助けている可能性が高いと思います。 –

0

私はsetNeedsDisplayと呼んでいます。 setNeedsDisplayInRectに電話する必要があります。変更された矩形だけを渡すようにしてください。

関連する問題