Objective c NSView drawRect和视网膜图像
因为,我需要一些高级菜单栏项,所以我使用自定义NSView子类作为菜单栏项的视图 在drawrect中,我正在绘制一些简单的nsimage,它可以很好地用于正常显示,但在视网膜显示上,它加载的图像更小(是的,我有@2x艺术品) 代码:Objective c NSView drawRect和视网膜图像,objective-c,macos,cocoa,core-graphics,Objective C,Macos,Cocoa,Core Graphics,因为,我需要一些高级菜单栏项,所以我使用自定义NSView子类作为菜单栏项的视图 在drawrect中,我正在绘制一些简单的nsimage,它可以很好地用于正常显示,但在视网膜显示上,它加载的图像更小(是的,我有@2x艺术品) 代码: - (void)drawRect:(NSRect)dirtyRect { [self.statusItem drawStatusBarBackgroundInRect:dirtyRect withHighlight:self.isHighlighted
- (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];
}
我用石英调试和真正的视网膜Macbooks进行了测试,除了menubar中的这个小图像,一切都很好
更新:
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 ImageName:@“icon.png”]
do[NSImage ImageName:@“icon”]
Xcode将“Combine High-Resolution Artwork”(合并高分辨率艺术品)设置为“是”,这将使您的图像合并到TIFF文件中。因此,捆绑包中不存在PNG文件,因此不会加载。这可能是一个暗中拍摄,但如果加载带有扩展名的图像,请尝试将其删除 而不是:
[NSImage ImageName:@“icon.png”]
do[NSImage ImageName:@“icon”]
Xcode将“Combine High-Resolution Artwork”(合并高分辨率艺术品)设置为“是”,这将使您的图像合并到TIFF文件中。因此,捆绑包中不存在PNG文件,因此不会加载。nsimage对象数组、创建宽度IMAGANNED方法nsimage对象数组、创建宽度IMAGANNED方法