CoreGraphicsカスタム描画コードを含むUIView
サイズの変数があります。drawRect
ビューは元々非常に小さかったが、非常に広くなる可能性がありUIScrollView
、ユーザーがビューをスクロールできるように内部に配置されます。
現時点では、ビューは図面全体に合わせて必要な幅になるように作成されており、CoreGraphicsコードはのビュー全体に描画されdrawRect
ます。
- (void)drawRect:(CGRect)rect {
// Only try and draw if the frame size is greater than zero and the graph has some range
if ((self.frame.size.width>0) && (self.frame.size.height>0) && ((maxX - minX)>0)) {
// Get the current drawing context
CGContextRef context = UIGraphicsGetCurrentContext();
// Save the state of the graphics context
CGContextSaveGState(context);
// Set the line style
CGContextSetRGBStrokeColor(context, 0.44, 0.58, 0.77, 1.0);
CGContextSetRGBFillColor(context, 0.44, 0.58, 0.77, 1.0);
CGContextSetLineWidth(context, 3.0);
CGContextSetLineDash(context, 0, NULL, 0);
// Draw the graph
[self drawGraphInContext:context];
// Restore the graphics context
CGContextRestoreGState(context);
}
}
これをより効率的にすることができます:
- でrectパラメータを使用して境界計算を実行し、
drawRect
現在表示されているもののみを描画します。 - 小さい方
UIView
(たとえば、scrollViewフレームの幅の2倍)を作成し、スクロール位置が移動したら、画像を再描画して、scrollViewの中心を再設定します。
これらのいずれかを実行する前に、努力する価値があるかどうか、およびUIViewが非常に広くなった場合に後で問題が発生する可能性があるかどうかを理解したいと思います。これまでのところパフォーマンスは問題ではありませんが、メモリが問題になるのではないかと心配しています。
具体的には、scrollViewは、ビューが使用するメモリの量を表示領域に制限しますか?グラフィックスコンテキストは、ビュー全体のサイズ、表示領域、またはrectパラメーターのサイズを作成しましたか?表示領域外の描画操作は、CoreGraphicsによって単に無視されますか?
ヘルプとベストプラクティスのアドバイスをいただければ幸いです。