1

我希望在我的 Mac OSX 应用程序中添加功能,以在传递一系列变量值时显示类似于附加链接中的图形(Mac OSX 显示硬盘驱动器上的剩余可用空间)。

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

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

4

2 回答 2

2

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

对于任何想学习如何做到这一点的人,我强烈推荐这个教程

于 2012-12-24T11:56:31.520 回答
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];

}

对于蒙版图像,我使用了 NSBox 对象大小的简单黑白 Photoshop 图片,并将所有应该变得透明的东西涂黑。这种方法的唯一问题是 NSBox 的阴影没有被渲染。为此,您需要在蒙版中创建渐变。这实际上应该非常简单。

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

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

它最终看起来像这样: http: //postimage.org/image/s8tvb5fop/

希望有帮助。

于 2012-12-10T22:53:43.943 回答