与NSValueTransformer一起使用时,NSImage具有不透明度

phi*_*kes 7 macos cocoa nsimage nsimagecell nsvaluetransformer

我试图根据核心数据中的枚举值显示NSImage.我在NSImageCell上使用Value Transformer绑定到我选择要显示的图像的值.

当使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

相应的静态NSImage定义:

static NSImage* downloadingImage;
static NSImage* downloadFailedImage;
static NSImage* downloadCompleteImage;
Run Code Online (Sandbox Code Playgroud)

和我使用的枚举:

typedef enum {
    DownloadStatusNone,
    DownloadStatusDownloading,
    DownloadStatusComplete,
    DownloadStatusFailed
} DownloadStatus;
Run Code Online (Sandbox Code Playgroud)

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

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

phi*_*kes 10

亚琛可可头的一名成员指出:为什么我的NSTableView中的图像逐渐淡出?

来自Jim Correia的Cocoa-Dev:

"在10.6上,当禁用控件时,NSImageView会将其内容绘制为暗灰色.

您的绑定已启用"Conditional Sets Enabled"."

这为我解决了!