让我们说我的NSView
实例中的某个实例变量中有一些行集合。随着时间的推移,这个系列保持不变你会如何画出这个系列?
我目前在设置集合时绘制到NSImage
,并覆盖-drawRect:
以显示图片的内容。还有更好的方法吗?
目前已测试了两个选项:
NSImage
,并覆盖-drawRect:
以显示图片的内容。-drawRect:
本身中绘制线条列表。Benchmarks显示图像绘制速度更快。如果我调整窗口的大小,它就有了,说; 10000个线段,如果我使用第二个选项,则调整大小非常慢。第一个不是这样。
什么是优选的(例如最有效的)策略?
示例代码:
- (void)drawSegments:(NSSize)size segments:(segment *)segments count:(int)nb_segments {
NSBitmapImageRep *lineRepresentation = [self bitmapForPixels:linePixels];
[NSGraphicsContext setCurrentContext:
[NSGraphicsContext graphicsContextWithBitmapImageRep:lineRepresentation]];
memset(*linePixels, 0, pixels*4);
NSBezierPath *path = [NSBezierPath bezierPath];
for (int i=0 ; i<nb_segments ; i++) {
[path moveToPoint:NSMakePoint(segments[i].x1, segments[i].y1)];
[path lineToPoint:NSMakePoint(segments[i].x2, segments[i].y2)];
}
[[NSColor blackColor] setStroke];
[path stroke];
[lineRepresentation release];
}
- (NSBitmapImageRep *)bitmapForPixels:(int **)pixels {
NSBitmapImageRep *representation = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:((unsigned char **)pixels)
pixelsWide:SCREEN_SIZE.width
pixelsHigh:SCREEN_SIZE.height
bitsPerSample:8
samplesPerPixel:4
hasAlpha:true
isPlanar:false
colorSpaceName:NSDeviceRGBColorSpace
bitmapFormat:NSAlphaFirstBitmapFormat
bytesPerRow:4*SCREEN_SIZE.width
bitsPerPixel:32];
return representation;
}