我试图在NSOpenGLView上叠加图像。除非视图拉伸超过2000px的宽度,否则一切正常。这是我如何将它应用于NSOpenGLView。请记住,我本质上是插入另一个应用程序,所以这个功能是一种黑客攻击。
- (void)applyOverlay {
NSWindow* mainWindow = [[NSApplication sharedApplication]mainWindow];
NSArray* subViews = [[mainWindow contentView] subviews];
NSOpenGLView* openGLView = subViews[0];
Overlay* overlay = [[VRayOverlay alloc] initWithFrame:[openGLView frame]];
[openGLView setAutoresizesSubviews:YES];
[openGLView addSubview:overlay];
}
我的叠加层看起来像这样
@implementation Overlay
- (id)initWithFrame:(NSRect)rect
{
self = [super initWithFrame:rect];
if (self) {
self->image = [[NSImage alloc] initByReferencingFile:@"/my_path/scribbles.png"];
[self setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
[super drawRect:dirtyRect];
[self->image drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeCopy fraction:0.5];
}
@end
这是宽度低于2000px时的结果 这是宽度超过2000px时的结果。另外,请注意右侧的最后一个图块被拉伸以适合视图框。
这是一个错误还是我做错了什么?我尝试过不同尺寸的不同图像,效果似乎相同。