Рисование нескольких объектов в одном контексте с разными ориентациями

Я пытаюсь нарисовать кучу прямоугольников (до 2000) на одном UIView, используя цикл. Я могу легко добиться этого с помощью следующего кода в методе DrawRect UIView:

CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(context, 1.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextSetFillColorWithColor(context, [UIColor tescoBlue].CGColor);

    for (NSDictionary *dict in storeDimensionsArray) {
        float x = [[dict objectForKey:@"X"] floatValue];
        float y = [[dict objectForKey:@"Y"] floatValue];
        float width = [[dict objectForKey:@"Width"] floatValue];
        float length = [[dict objectForKey:@"Length"] floatValue];

        CGContextAddRect(context, CGRectMake(x, y, length, width));
        CGContextDrawPath(context, kCGPathFillStroke);
        [self setNeedsDisplay];
    }

Однако каждый из моих прямоугольников может иметь другую ориентацию, которая представлена ​​​​углом (i градусов). Хоть убей, я не могу понять, как рисовать каждую фигуру со своей независимой ориентацией, какие-нибудь идеи?

Я пробовал следующий код, но он не работает.

    CGContextTranslateCTM (context, x, y);
    CGContextRotateCTM(context, radians([[dict objectForKey:@"Angle"] floatValue]));
    // tried adding the drawing code here 
    CGContextTranslateCTM (context, -x , -y);
    // ...or here

У меня проблемы с пониманием контекста. Кажется, гораздо более простым решением было бы изменить ориентацию прямоугольника.

Любая помощь приветствуется!


person KSoza    schedule 09.12.2010    source источник


Ответы (1)


По моему мнению, вы не можете использовать метод CGContextAddRect() для рисования прямоугольника в пользовательской ориентации. Может быть, я ошибаюсь, но я думаю, что вы должны нарисовать их, используя:

CGContextMoveToPoint(context, x, y);
CGContextAddLineToPoint(context, x, y);
CGContextAddLineToPoint(context, x, y);
CGContextAddLineToPoint(context, x, y);
CGContextAddLineToPoint(context, x, y);
CGContextStrokePath(context);

Итак, вам, вероятно, придется вычислять координаты в пользовательском методе.

person foOg    schedule 09.12.2010
comment
Спасибо, но я надеялся, что до этого не дойдет и был более простой вариант. Я дам ему пойти и посмотреть, как он идет! - person KSoza; 09.12.2010