Сохраните графический контекст в NSGraphicsContext, чтобы перерисовать содержимое представления - PullRequest
0 голосов
/ 05 июня 2011

Я пытаюсь сохранить графический контекст и отобразить его вместе с новыми добавленными чертежами.Это не работает для меня.

Я делаю это в цикле, чтобы рисовать имена на пользовательском NSView:

- (void)drawNamesQuarterFinals{

    self.drawStringWithAttributes = [self stringAttributes:0];


    if ([self.arrayWithQuarterFinals count] > 4)
    {
        for (int i = 0;i < 8;i++){
            self.stringToDraw = [NSString stringWithFormat:@"%@", [self.arrayWithQuarterFinals objectAtIndex:i]];
            self.whereToDrawString = [self namePositions:i rowNumber:0];
            [self setNeedsDisplay:YES];

        }

    }

}

Это мой drawRect: метод:

- (void)drawRect:(NSRect)dirtyRect
{

    NSGraphicsContext *currentContext = [NSGraphicsContext currentContext];

    [self drawPlayField];

    [self.stringToDraw drawAtPoint:self.whereToDrawString withAttributes:self.drawStringWithAttributes];
    [NSGraphicsContext saveGraphicsState];

    [currentContext restoreGraphicsState];
}

Как видите, я использую цикл для вытягивания всех имен, но в NSView отображается только фамилия.Остальные перезаписываются каждый раз, когда вызывается drawRect:.

Мой вопрос: как я могу предотвратить это?Как вы можете видеть, я пытался добавить NSGraphicsContext, где я хочу сохранить свой контекст для перерисовки, но это не работает.Я мог бы быть далеко.Направь меня в правильном направлении, пожалуйста!

1 Ответ

0 голосов
/ 06 июня 2011

setNeedsDisplay: помечает вид как грязный, и его необходимо перерисовать.Это происходит на каждом цикле выполнения.Таким образом, он вызывается только один раз после завершения цикла и, следовательно, используются последние сохраненные значения whereToDrawString и stringToDraw.Правильный подход заключается в том, чтобы пометить представление как грязное, когда [self.arrayWithQuarterFinals count] > 4, а затем зациклить массив arrayWithQuarterFinals внутри drawRect: и соответственно нарисовать строки.

...