У меня есть переменная размером UIView
с drawRect
с кодом пользовательского чертежа CoreGraphics. Первоначально представление было довольно маленьким, но имело потенциал стать очень широким и помещено внутри UIScrollView
, чтобы позволить пользователю прокручивать представление.Как память обрабатывается подклассом UIView внутри 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);
}
}
я могу сделать это более эффективным:
- Doing ограничивающего Calcs с параметром Rect в
drawRect
и только рисунок материала, который в настоящее время видны. - Создание меньшего
UIView
(скажем, 2x ширины кадра scrollView), а при перемещении позиции прокрутки перерисовывает изображение и повторно центрирует scrollView.
Прежде чем я попытаюсь выполнить одно из этих действий, я хотел бы понять, стоит ли это усилий и может ли я столкнуться с проблемами позже, если UIView станет очень широким. Пока что производительность не проблема, но я беспокоюсь, что память может быть.
В частности, позволяет ли scrollView ограничить объем памяти, используемый видом, видимой области? - это графический контекст, созданный размером всего представления, видимой области или размера параметра rect? Являются ли операции рисования вне видимой области просто проигнорированы CoreGraphics?
Любая помощь и рекомендации по лучшей практике будут оценены.