Я занимаюсь разработкой базового приложения для рисования, в котором есть несколько классов.Одним из них является класс «Line», который хранит некоторую информацию о линии, которую может нарисовать пользователь.Когда пользователь перетаскивает экран, линия создается для каждого движения его пальца, поэтому линия следует за ним.Я сохраняю все линейные объекты в NSArray и перерисовываю каждый раз, когда что-то меняется.Тем не менее, так как массив только продолжает расти, и в конечном итоге начинает замедляться.Есть ли способ просто нарисовать новые линии или лучший механизм хранения линий?
РЕДАКТИРОВАТЬ: прочитайте ответ ниже, но setNeedsDisplayInRect:
, похоже, не работает.Я называю это так:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *t in touches) {
//add line to array w/ x and y values from touch
[self setNeedsDisplayInRect:[self rectForLine:line]];
}
}
-(CGRect)rectForLine:(Line*)line {
CGFloat x1 = [line begin].x;
CGFloat y1 = [line begin].y;
CGFloat x2 = [line end].x;
CGFloat y2 = [line end].y;
CGFloat originX = (x1>x2) ? x1 : x2;
CGFloat originY = (y1<y2) ? y1 : y2;
CGFloat diffX = ((x1>x2) ? x1 : x2) - originX;
CGFloat diffY = ((y1>x2) ? y1 : y2) - originY;
return CGRectMake(originX, originY, diffX, diffY);
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 10.0);
CGContextSetLineCap(context, kCGLineCapRound);
//[[UIColor blackColor] set];
for (Line *line in completeLines) {
if (CGRectContainsPoint(rect, [line begin]) && CGRectContainsPoint(rect, [line end])) {
//draw line onto the screen
}
}