В моем приложении отображается длинный график, на котором ось X помечена годами в диапазоне от 400 до 2100. График отображается в виде UIView и добавляется как вспомогательное представление в UIScrollView. Ось нарисована с помощью маркеров года с использованием CGContextRef в drawRect, как упомянуто в этой ссылке .
Из-за длинной оси ширина рамки графика (UIView) установлена на 10000. Этот график без проблем отображается на устройствах со средним разрешением экрана, таких как iPad 2. Однако, когда этот график открывается в устройствах с высоким разрешением, таких как iPad Air, возникают проблемы. как фон не прорисован (стал прозрачным) и при прокрутке весь график становится грязным из-за перерисовки содержимого без удаления ранее нарисованного содержимого.
Даже я вызывал следующие методы в делегате 'setFrame', но бесполезно.
[self setNeedsLayout];
[self setNeedsUpdateInRect:self.frame];
Может кто-нибудь предложить эффективную графику рисования графики в drawRect для повышения производительности устройств с высоким разрешением?
Ниже приведен мой код в делегате drawRect:
CGContextRef context = UIGraphicsGetCurrentContext();
[self.layer renderInContext:context];
CGPoint startPoint = CGPointMake(graphEndPadding, graphBaselineY);
CGContextMoveToPoint(context, startPoint.x, startPoint.y);
//Create line from starting point to end point
CGPoint endPoint = CGPointMake(graphLengthPixels+graphEndPadding, graphBaselineY);
CGContextAddLineToPoint(context, endPoint.x, endPoint.y);
//Create hashmark point system
CGFloat currX = startPoint.x;
CGFloat yVal = startPoint.y + graphHashMarkLength;
//Draw hashmarks
int count = 0;
while(currX <= endPoint.x) {
//Draw hashmark
CGContextMoveToPoint(context, currX, graphBaselineY);
CGContextAddLineToPoint(context, currX, yVal);
//Move to next hashmark
currX += pixelYearIncrement;
count++;
}
//Draw x-axis
CGContextSetLineWidth(context, 1);
CGContextSetLineCap(context, cgLineCapSquare);
CGContextSetRGBStrokeColor(context, 0.7765, 0.6118, 0.4275, 1.0);
CGContextStrokePath(context);