DrawRect вызывается после создания пользовательского интерфейса? - PullRequest
0 голосов
/ 23 января 2012

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

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);
}

Ответы [ 2 ]

1 голос
/ 23 января 2012

Просто вызовите setNeedsDisplay для представления, чтобы принудительно вызвать его метод drawRect.

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

0 голосов
/ 23 января 2012

Могу ли я использовать один и тот же подкласс 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...