8

我试图根据核心数据之外的枚举值显示一个 NSImage 。我在绑定到我选择要显示的图像的值的 NSImageCell 上使用值转换器。

不幸的是,当使用 NSValueTransformer 时,图像会得到它不应该具有的不透明度,并且可以完美地工作。

这是我的 NSValueTransformer 子类的摘录:

+ (void)initialize
{
    downloadingImage = [NSImage imageNamed:@"downloading.png"];
    downloadFailedImage = [NSImage imageNamed:@"download_failed.png"];
    downloadCompleteImage = [NSImage imageNamed:@"download_complete.png"];
}
+ (Class)transformedValueClass { return [NSImage class]; }
+ (BOOL)allowsReverseTransformation { return NO; }
- (id)transformedValue:(id)value {
    switch([value intValue])
    {
        case DownloadStatusComplete:
            return downloadCompleteImage;
        case DownloadStatusFailed:
            return downloadFailedImage;
        case DownloadStatusNone:
            return nil;
        case DownloadStatusDownloading:
            return downloadingImage;
        default:
            return nil;
    }
}

对应的静态 NSImage 定义:

static NSImage* downloadingImage;
static NSImage* downloadFailedImage;
static NSImage* downloadCompleteImage;

和我使用的枚举:

typedef enum {
    DownloadStatusNone,
    DownloadStatusDownloading,
    DownloadStatusComplete,
    DownloadStatusFailed
} DownloadStatus;

下面是实际应用程序的屏幕截图,其中一个没有 NSValueTransformer,但在 IB 中分配了一个静态 NSImage。所以它不是具有 alpha 或其他东西的 PNG。来自不同位置的三个不同图像会发生这种情况。

实际应用 http://imageshack.us/a/img195/2492/appqe.png 静态图片 http://imageshack.us/a/img27/3289/43084671.png

4

1 回答 1

11

cocoaheads Aachen 的成员向我指出:为什么我的 NSTableView 中的图像淡出?

来自 Cocoa-Dev 的 Jim Correia:

“在 10.6 上,NSImageView 将在控件被禁用时将其内容绘制为灰色。

您的绑定已启用“条件设置启用”。”

这为我解决了!

于 2013-06-10T13:35:28.333 回答