Я считаю, что правильный термин для этого - окно рамки.Quicksilver с открытым исходным кодом (https://github.com/quicksilver/Quicksilver), так что вы можете увидеть, как они это делают, но я сделал нечто похожее с пользовательским подклассом NSWindow
:
- (id) initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
{
if((self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag])) {
[self setOpaque:NO];
[self setIgnoresMouseEvents:YES];
[self setLevel:NSFloatingWindowLevel];
[self setBackgroundColor:[NSColor clearColor]];
}
return self;
}
и анимацией, управляемойКонтроллер окна:
- (void) windowDidLoad
{
CAAnimation *animation = [CABasicAnimation animation];
[animation setDelegate:self];
[[self window] setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"alphaValue"]];
}
, чтобы заставить окно исчезать, должен работать код, подобный следующему:
[[self window] setAlphaValue:0.0];
[[[self window] animator] setAlphaValue:1.0];
[[self window] orderFront:self];
Я понимаю, что это не Plug and Play решение, но оно должноНачните.