2009-05-03 6 views
0

現在、drawRectにCGLayerを描画するためにCGContextDrawLayerInRectを使用しています。これはかなり頻繁に呼び出されます。 drawRectのCGLayer全体ではなく変更されたCGLayerの部分だけを描画することで、オーバーヘッドを減らす方法はありますか?CGLayerのdrawRectメソッドを最適化する

-(void)drawRect:(CGRect)rect { 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
    CGContextDrawLayerInRect(currentContext, [self bounds], _backgroundLayer); 
} 
+0

ここに答えがあります: http://stackoverflow.com/questions/11207801/create-cgcontext-for-cglayer – Hao

答えて

0

rectパラメータは、再描画が必要な領域を示します。これを使用して再塗装する量を制限する以外、 drawrectが呼び出されると、システムがあなたのレイヤで何をしているのか分かりません。たとえば、システムアニメーションの新しいコンテキストにビュー全体をプレレンダリングすることができます。

実際にパフォーマンスが低下していますか?たぶんあなたの描画コードは他の方法で最適化することができます。

0

これはあなたが得るほど最適化されていると私は思います。 setNeedsDisplayをあまり頻繁に呼び出すことはできないでしょうか?これがあなたにとって遅すぎる場合は、OpenGLを使用することをお勧めします。

0

おそらく、-drawRectを完全に削除してみてください。 UIImageViewまたはCALayerに描画し、それを処理させます。