如何复制Mac OSX系统图形?

时间:2012-12-10 21:30:00

标签: xcode cocoa

我希望在我的Mac OSX应用程序中添加功能,以便在传递一系列变量值时显示与所附链接中的图形相同的图形(Mac OSX显示硬盘上可用的剩余空间)。 / p>

例如,如果我有5个变量,A到E具有以下值/百分比(A = 50,B = 20,C = 15,D = 10,E = 5),我想学习如何以这种格式以图形方式显示这些值,其中颜色条的大小与值成比例,并且还显示图例。

任何人都可以提供的示例代码将不胜感激。

2 个答案:

答案 0 :(得分:2)

解决:最后我决定学习如何使用石英做一些绘图。这是非常有益的,因为我已经实现了按比例缩放的条形图的期望结果,随着输入变量的改变而改变尺寸。它也是非常可定制的。

对于其他想要了解如何操作的人,我强烈推荐这个tutorial

答案 1 :(得分:0)

实现这一目标的方法有很多种。我将从使用NSBox对象开始,并给它正确的形状。接下来,我将以编程方式创建一个显示不同颜色的图像,并用另一个图像将其遮盖以剪切掉所有边缘。然后我会在框内创建一个NSImageView并在那里显示蒙版图像。如果你愿意,我可以添加一些代码。

编辑:

一些代码。

我尝试使用一个由2种颜色和透明的休息组成的简单静态图片。我只是将它添加到插座中:

-(void) awakeFromNib{
     NSImage* img = [self maskImage:[NSImage imageNamed:@"Static image from Bundle"] withMask:[NSImage imageNamed:@"Static image mask"]];
    [imgView setImage:img];

}

maskImage:withMask:方法如下所示:

- (NSImage*) maskImage:(NSImage *)image withMask:(NSImage *)maskImage {
     CGImageSourceRef sourceRef = CGImageSourceCreateWithData((__bridge CFDataRef)[maskImage TIFFRepresentation], NULL);
     CGImageRef maskRef = CGImageSourceCreateImageAtIndex(sourceRef, 0, NULL);

     sourceRef = CGImageSourceCreateWithData((__bridge CFDataRef)[image TIFFRepresentation], NULL);
     CGImageRef imageRef = CGImageSourceCreateImageAtIndex(sourceRef, 0, NULL);


     CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                    CGImageGetHeight(maskRef),
                                    CGImageGetBitsPerComponent(maskRef),
                                    CGImageGetBitsPerPixel(maskRef),
                                    CGImageGetBytesPerRow(maskRef),
                                    CGImageGetDataProvider(maskRef), NULL, false);

     CGImageRef masked = CGImageCreateWithMask(imageRef, mask);
     return [[NSImage alloc] initWithCGImage:masked size:NSZeroSize];

}

对于蒙版图像,我使用了一张简单的黑白Photoshop图片,其中包含了NSBox对象的大小,并将所有应该变为透明的内容涂黑了。此方法的唯一问题是不呈现NSBox的阴影。要实现此目的,您需要在蒙版中创建渐变。这应该是非常直接的。

我一直在使用这些图片:http://postimage.org/gallery/ertbeca/

来源图片:http://postimage.org/image/pdgs4abop/ 蒙版图片:http://postimage.org/image/54teikcdl/

结果看起来像这样:http://postimage.org/image/s8tvb5fop/

希望有所帮助。