Я разрабатываю базовое приложение для рисования, в котором есть несколько классов. Один из них - это класс 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
}
}
setNeedsDisplay
. Если вынуть это, вообще ничего не привлекает. - person Jumhyn   schedule 23.03.2011