objective-c - NSView drawRect 和视网膜图像

标签 objective-c macos cocoa core-graphics

因为,我需要一些高级菜单栏项目,所以我使用自定义 NSView 子类作为 menubaritem 的 View 。

在drawrect中,我正在绘制一些简单的nsimage,它在普通显示器上工作正常,但在视网膜显示器上,它加载较小的图像(是的,我有@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];
}

我用 Quartz Debug 和真正的 Retina Macbook 对其进行了测试,除了菜单栏中的这个小图像之外,一切都很好。

更新:

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];

最佳答案

这可能是在黑暗中拍摄的,但如果您正在使用扩展程序加载图像,请尝试删除它。

而不是: [NSImage imageNamed:@"icon.png"] 执行 [NSImage imageNamed:@"icon"]

Xcode 将“组合高分辨率图稿”设置为 YES,这会将您的图像组合成 TIFF 文件。因此, bundle 中不存在 PNG 文件,因此不会加载。

关于objective-c - NSView drawRect 和视网膜图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14883443/

相关文章:

ios - presentViewController 是否清理父 View ?

ios - Objective-C:应用内消息按钮的 Action

macos - 如何创建 NSImage 的 8 位、4 位和 1 位表示

macos - 如何显示圆形警报/信息窗口(类似于 os x 中更改声音时的警报)

macos - 使用 URLForDirectory 而不是 FFSfindFolder 定位 Mac OS X 文件夹

objective-c - NS条件死锁

ios - 文本字段作为平均函数的输入

objective-c - 需要有关简单 OpenGL ES 2.0 代码的帮助

macos - 用于通过SSH管理Redis的桌面客户端

Cocoa PDF获取页面旋转值问题