8

Core Data からの列挙値に応じて 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;
    }
}

対応する静的 NSImage 定義:

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

そして私が使用する列挙型:

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

以下は、実際のアプリケーションのスクリーンショットです。NSValueTransformer はなく、IB で静的な NSImage が割り当てられています。したがって、アルファか何かを持っているのはPNGではありません。これは、異なる場所からの 3 つの異なる画像で発生します。

実際のアプリケーション http://imageshack.us/a/img195/2492/appqe.png 静止画像 http://imageshack.us/a/img27/3289/43084671.png

4

1 に答える 1