2012-01-23 7 views
0

Мне нужно нарисовать две линии. могу ли я использовать один и тот же подкласс UIView, чтобы сделать оба розыгрыша? после того, как я создать UIViewdrawRect вызван после создания пользовательского интерфейса?

draw2D *myView = [[draw2D alloc] initWithFrame:myRect]; 

если я изменить способ использовать переменные, можно ли изменить эти значения и вызывать метод DrawRect нарисовать другую линию?

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context01 = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context01, 1.0); 
    CGContextSetStrokeColorWithColor(context01, [[UIColor blackColor]CGColor]); 
    CGContextMoveToPoint(context01, 0, 0); 
    CGContextAddLineToPoint(context01, 800, 0); 
    CGContextStrokePath(context01); 

    CGContextRef context02 = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context02, 1.0); 
    CGContextSetStrokeColorWithColor(context02, [[UIColor blackColor]CGColor]); 
    CGContextMoveToPoint(context02, 453, 0); 
    CGContextAddLineToPoint(context02, 453, 800); 
    CGContextStrokePath(context02); 
} 

ответ

1

Просто позвоните на setNeedsDisplay целью заставить его метод DrawRect называться снова.

Он не перерисовывает представление сразу, но он указывает на необходимость повторного рисования в следующем цикле обновления обзора (обновления происходят примерно каждые 60 секунд). Это означает, что вы можете многократно вызывать setNeedsDisplay без штрафа за производительность.

0

Могу ли я использовать один и тот же UIView подкласс сделать так привлекает?

уверен

если я изменить способ использовать переменные, можно ли изменить эти значения и вызывать метод DrawRect нарисовать другую линию?

нормально, вы бы просто создать новую функцию или метод с параметрами для этих переменных:

static inline void imp_DrawLine(CGContextRef gtx, CGPoint start, CGPoint end) { 
    CGContextMoveToPoint(gtx, start.x, start.y); 
    CGContextAddLineToPoint(gtx, end.x, end.y); 
    CGContextStrokePath(gtx); 
} 

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef gtx = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(gtx, 1.0); 
    CGContextSetStrokeColorWithColor(gtx, [UIColor blackColor].CGColor); 

    imp_DrawLine(gtx, CGPointMake(0, 0), CGPointMake(800, 0)); 
    imp_DrawLine(gtx, CGPointMake(453, 0), CGPointMake(453, 800)); 
} 
+0

но как я могу получить UIView для перерисовки? Я не верю, что могу напрямую вызвать метод drawRect, может ли я? – Padin215

+0

См. Мой ответ выше. –

+1

, вы не должны называть 'drawRect' напрямую. вместо этого сделайте недействительным его использование с помощью 'setNeedsDisplayInRect:' или 'setNeedsDisplay'. то система просмотра попросит вас сделать в нужное время. – justin

Смежные вопросы