我正在尝试保存图形上下文并将其与新添加的图形一起显示。它不适合我。
我在循环中执行此操作以在自定义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
我希望保存我的上下文以重新绘制,但这不起作用。
我可能会离开。请指出我正确的方向!
答案 0 :(得分:0)
setNeedsDisplay:
将视图标记为脏,并且需要重新绘制。这发生在每个运行循环中。因此,在循环完成后仅调用一次,因此使用whereToDrawString
和stringToDraw
的最后存储值。正确的方法是在[self.arrayWithQuarterFinals count] > 4
时将视图标记为脏,然后在arrayWithQuarterFinals
内循环drawRect:
数组并相应地绘制字符串。