Внедрение представления для этого было бы относительно простым. Следующий код в подклассе NSView отображает частично прозрачный закругленный прямоугольник, который игнорирует события при размещении в окне.
- (void)drawRect:(NSRect)dirtyRect {
[[NSColor colorWithDeviceWhite:0 alpha:.7] set];
[[NSBezierPath bezierPathWithRoundedRect:self.bounds xRadius:10 yRadius:10] fill];
//Additional drawing
}
- (NSView *)hitTest:(NSPoint)aPoint {
return nil;
}
- (BOOL)acceptsFirstResponder {
return NO;
}
- (BOOL)isOpaque {
return NO;
}
Если вы хотите сделать это в окне, вам нужно будет создать без полей, без непрозрачного окна и установить это, как вид контента. Кроме того, вам нужно будет, чтобы представление заполнило его границы четким цветом в начале метода drawRect :.
//Create and display window
NSPanel *panel = [[NSPanel alloc] initWithFrame:NSMakeRect(0,0,300,200) styleMask:NSBorderlessWindowMask|NSNonactivatingPanelMask backing:NSBackingStoreBuffered defer:YES];
[panel setOpaque:NO];
MyViewSubview *view = [MyViewSubview new];
[panel setContentView:view];
[view release];
[p setLevel:NSScreenSaverWindowLevel];
[p orderFront:nil];
//Add these two lines to the beginning of the drawRect: method
[[NSColor clearColor set];
NSRectFill(self.bounds);
Однако это окно перехватит события, и я не смог его отключить, используя стандартные методы.
Чтобы убрать изображение, зарегистрируйтесь NSViewAnimation или используйте объект NSTimer и сделайте это вручную.
На самом деле, я думаю, что XCode просто использует представление, но TextWrangler и BBEdit используют окно. – ughoavgfhw