0

高度なメニューバーアイテムが必要なため、メニューバーアイテムのビューとしてカスタムNSViewサブクラスを使用しています。

drawrectでは、いくつかの単純なnsimageを描画しています。通常のディスプレイでは正常に機能しますが、Retinaディスプレイでは、小さい画像が読み込まれます(はい、@ 2xアートワークがあります)。

コード:

 - (void)drawRect:(NSRect)dirtyRect
{

    [self.statusItem drawStatusBarBackgroundInRect:dirtyRect withHighlight:self.isHighlighted];
    [icon scalesWhenResized];
    icon = self.isHighlighted ? self.alternateImage : [images objectAtIndex:index];
    NSSize iconSize = [icon size];

    NSRect bounds = self.bounds;
    CGFloat iconX = roundf((NSWidth(bounds) - iconSize.width) / 2);
    CGFloat iconY = roundf((NSHeight(bounds) - iconSize.height) / 2);
    NSPoint iconPoint = NSMakePoint(iconX, iconY);
    [icon drawAtPoint:iconPoint fromRect:bounds operation:NSCompositeSourceOver fraction:1];
}

QuartzDebugと実際のRetinaMacbookでテストしましたが、メニューバーのこの小さな画像を除いてすべて問題ありません。

アップデート:

self.images = [NSArray arrayWithObjects:[NSImage imageNamed:@"1.png"],[NSImage imageNamed:@"2.png"],[NSImage imageNamed:@"3.png"],[NSImage imageNamed:@"4.png"],[NSImage imageNamed:@"5.png"],[NSImage imageNamed:@"6.png"],[NSImage imageNamed:@"7.png"],[NSImage imageNamed:@"8.png"],[NSImage imageNamed:@"9.png"],[NSImage imageNamed:@"10.png"],[NSImage imageNamed:@"11.png"],[NSImage imageNamed:@"12.png"],[NSImage imageNamed:@"13.png"],[NSImage imageNamed:@"14.png"],[NSImage imageNamed:@"15.png"],[NSImage imageNamed:@"16.png"],[NSImage imageNamed:@"17.png"],[NSImage imageNamed:@"18.png"],[NSImage imageNamed:@"19.png"],[NSImage imageNamed:@"20.png"],[NSImage imageNamed:@"21.png"],[NSImage imageNamed:@"22.png"],[NSImage imageNamed:@"23.png"],[NSImage imageNamed:@"24.png"],[NSImage imageNamed:@"25.png"],[NSImage imageNamed:@"26.png"],
                   nil];
4

1 に答える 1

3

これは暗闇の中でのショットかもしれませんが、拡張機能を使用して画像をロードしている場合は、ドロップしてみてください。

代わりに [NSImage imageNamed:@"icon.png"][NSImage imageNamed:@"icon"]

Xcodeは「CombineHighResolutionArtwork」をYESに設定します。これにより、画像がTIFFファイルに結合されます。したがって、PNGファイルはバンドルに存在しないため、ロードされません。

于 2013-02-15T13:16:42.040 に答える