Как реализовать окно в стиле HUD, например, "Показать в большом шрифте" в адресной книге
Несколько приложений, в том числе встроенная адресная книга, используют полупрозрачное окно HUD с большим затененным текстом. Я хотел бы реализовать подобное окно в моем приложении Cocoa Mac.
Есть ли где-нибудь бесплатная реализация такого окна?
Если нет, то как лучше всего это осуществить?
2 ответа
Вот пример проекта, который показывает, как это сделать:
http://github.com/NSGod/BlackBorderlessWindow
В принципе, вам нужно создать без полей NSWindow
подкласс. Самый простой способ сделать это - установить размер и расположение окна в nib-файле, а затем установить его класс в качестве собственного подкласса. Таким образом, хотя оно все равно будет выглядеть как обычное окно в Интерфейсном Разработчике, во время выполнения оно будет отображаться так, как вам нужно.
@implementation MDBorderlessWindow
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)deferCreation {
if (self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered defer:deferCreation]) {
[self setAlphaValue:0.75];
[self setOpaque:NO];
[self setExcludedFromWindowsMenu:NO];
}
return self;
}
Значение альфа сделает окно полупрозрачным.
Также вы можете создать свой NSView
подкласс, который нарисует круглый прямоугольник:
@implementation MDBlackTransparentView
- (id)initWithFrame:(NSRect)frame {
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)drawRect:(NSRect)frame {
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame
xRadius:6.0 yRadius:6.0];
[[NSColor blackColor] set];
[path fill];
}
@end
Как и в случае с окном, вы просто устанавливаете класс contentView окна в соответствии со своими предпочтениями. NSView
подкласс. (Используйте режим просмотра контура и щелкните треугольник раскрытия, чтобы показать вложенный NSView
внутри значка окна в файле пера). Опять же, хотя представление будет выглядеть в Интерфейсном Разработчике как обычно, во время выполнения оно будет выглядеть нормально.
Тогда просто поместите NSTextField
сверху и установите текст соответствующим образом.
Обратите внимание, что в целом с окнами без полей нелегко работать (например, если вы хотите иметь возможность перетаскивать окно, вам нужно добавить эту функцию обратно самостоятельно). Например, у Apple есть пример кода о том, как разрешить перетаскивание.
Спасибо, что поделились этим кодом. Мне очень помогли! Вы можете добавить следующую строку...
[self setBackgroundColor:[NSColor clearColor]];
к функции инициализации окна. Это удаляет белые углы.