在NSGraphicsContext中保存图形上下文以重绘视图的内容

时间:2011-06-05 12:41:38

标签: objective-c cocoa macos nsview drawrect

我正在尝试保存图形上下文并将其与新添加的图形一起显示。它不适合我。

我在循环中执行此操作以在自定义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 :(得分:0)

setNeedsDisplay:将视图标记为脏,并且需要重新绘制。这发生在每个运行循环中。因此,在循环完成后仅调用一次,因此使用whereToDrawStringstringToDraw的最后存储值。正确的方法是在[self.arrayWithQuarterFinals count] > 4时将视图标记为脏,然后在arrayWithQuarterFinals内循环drawRect:数组并相应地绘制字符串。