У меня есть приложение, которое предоставляет пользователю своего рода линейный график. Я использую UIScrollView, который содержит представление с графиком. Представление использует CoreGraphics для рисования графика в своем методе drawrect.
Проблема возникает, когда график становится слишком длинным. Прокрутка графика кажется заикающейся, и в конце концов приложение исчерпает память и завершит работу. Оглядываясь на другие приложения, я вижу, что ребята, которые создали приложение WeightBot , смогли без проблем управлять длинными текущими графиками, поэтому, очевидно, я делаю это неправильно.
Мне было интересно, как создаются такие длинные линейные графики, не сталкиваясь с проблемами памяти?
РЕДАКТИРОВАТЬ: добавить код
По сути, все, что я делаю, - это инициализирую представление, которое строит график в его методе drawRect, и добавляю представление в качестве subView в scrollView.
Вот как реализуется drawRect представления:
- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(c, self.backgroundColor.CGColor);
CGContextFillRect(c, rect);
//... do some initialization
for (NSUInteger i = 0; i < xValuesCount; i++)
{
NSUInteger x = (i * step) * stepX;
NSUInteger index = i * step;
CGPoint startPoint = CGPointMake(x + offsetX, offsetY);
CGPoint endPoint = CGPointMake(x + offsetX, self.frame.size.height - offsetY);
CGContextMoveToPoint(c, startPoint.x, startPoint.y);
CGContextAddLineToPoint(c, endPoint.x, endPoint.y);
CGContextClosePath(c);
CGContextSetStrokeColorWithColor(c, self.gridXColor.CGColor);
CGContextStrokePath(c);
}
}