我正在尝试创建一个NSWindow没有标题栏(NSBorderlessWindowMask)的圆角和阴影,类似于下面的"欢迎使用Xcode"窗口.

我做了一个子类NSWindow:
@implementation FlatWindow
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
{
self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag];
if ( self )
{
[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];
[self setMovableByWindowBackground:TRUE];
[self setStyleMask:NSBorderlessWindowMask];
[self setHasShadow:YES];
}
return self;
}
- (void) setContentView:(NSView *)aView
{
aView.wantsLayer = YES;
aView.layer.frame = aView.frame;
aView.layer.cornerRadius = 10.0;
aView.layer.masksToBounds = YES;
[super setContentView:aView];
}
@end
Run Code Online (Sandbox Code Playgroud)
还有一个子类NSView:
@implementation ColoredView
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
[[NSColor windowBackgroundColor] set];
NSRectFill(dirtyRect); …Run Code Online (Sandbox Code Playgroud) 我正在使用一个带纹理的窗口,它的顶部有一个标签栏,位于标题栏的下方.
我已经-setContentBorderThickness:forEdge:在窗口上使用了渐变效果,并确保纸张从正确的位置滑出.
然而,什么不起作用是拖动窗口.如果我点击并拖动实际上是标题栏的区域,但是由于标题栏渐变溢出到(可能/通常是空的)标签栏,它很容易点击太低而且当你试图拖动时感觉非常令人沮丧并意识到窗户没有移动.
我注意到NSToolbar,当标题栏下方占据的空间大致相同时,允许在光标位于其上时拖动窗口.如何实现这一点?
谢谢.

由于Xcode中OS X应用程序的模板似乎与空的app模板类似,因此以下内容用于添加视图和按钮(现在尝试不使用"界面"构建器):
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];
view.layer.backgroundColor = [[NSColor yellowColor] CGColor];
[self.window.contentView addSubview:view];
NSRect frame = NSMakeRect(10, 40, 90, 40);
NSButton* pushButton = [[NSButton alloc] initWithFrame: frame];
pushButton.bezelStyle = NSRoundedBezelStyle;
[self.window.contentView addSubview:pushButton];
NSLog(@"subviews are %@", [self.window.contentView subviews]);
}
Run Code Online (Sandbox Code Playgroud)
iOS上的类似代码应该生成一个黄色框和一个按钮,但上面的代码只生成一个按钮,但视图不会显示.上面的代码有什么问题,以及如何让它以黄色背景显示视图?
苹果人机界面指南说:
如何在该图像中创建第一个标题栏(仅使用关闭按钮).禁用IB中的"调整大小"和"最小化"仅使调整大小/最小化按钮被禁用.但我希望它们消失.我怎样才能做到这一点?
提前致谢.
有没有办法隐藏NSWindow中的标题栏?我不想完全写一个新的自定义窗口.我不能使用NSBorderlessWindowMask,因为我的窗口上有一个底栏,使用NSBorderlessWindowMask使它消失.我也尝试使用setContentBorderThickness:forEdge:使用NSMaxYEdge并将其设置为0,这也不起作用.
任何帮助表示赞赏
在Cocoa应用程序中,有没有办法判断另一个应用程序当前是否处于全屏模式?
我的应用程序配置为显示在所有空间上并侦听mouseEntered事件以将自己命令到前端.
问题是当另一个应用程序处于全屏模式并且用户碰巧将鼠标移动到我的应用程序窗口所在的黑色区域时,它将被带到前面(多个监视器发生).
我只看到了上面[self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces];启用的行为.
这是我的应用程序的其他相关代码.
- (void) mouseEntered:(NSEvent *)theEvent
{
// Don't do this when another app is in full screen mode:
[[self window] orderFront:self];
}
Run Code Online (Sandbox Code Playgroud) 如何以编程方式设置窗口大小?我在IB中有一个窗口,我想在我的代码中设置它的大小以使其更大.
是否有可能将鼠标事件传递NSWindow给它后面的任何东西(即使它是来自另一个应用程序的窗口)?
我正在使用NSWindow创建桌面覆盖,但仍希望能够与其他窗口进行交互,即使它们位于我的覆盖窗口后面.
使用Vibrant Dark(NSAppearanceNameVibrantDark)或Vibrant Light(NSAppearanceNameVibrantLight)模式的正确方法是NSWindow什么?
我正在构建一个应用程序,并希望提供新的Vibrant Dark外观作为主应用程序的选项NSWindow.窗口本身是一个非常直接的窗口,NSToolbar顶部和滚动视图作为主要内容区域.
苹果公司提供了大量关于使用新的活力外观和a的信息NSVisualEffectsView,但我正在寻找关于如何使用这些外观的澄清NSWindow.
在NSAppearance.h头文件中,有一条注释声明应该只在一个上设置生动的外观NSVisualEffectsView.没有提到它得到支持NSWindow.
WWDC视频谈论确保您使用图层支持的视图,并且在使用新的充满活力的外观时允许您的子视图充满活力,但同样,没有提及使用它们NSWindow.
VisualEffectsPlayground示例代码确实有一个类似Facetime的应用程序的示例,它使用暗光振动模式,但它没有工具栏,它使用全内容掩码.
根据该信息,我在我的NSWindowController's windowDidLoad方法中执行以下操作:
[self.window.contentView setWantsLayer:YES];
self.window.appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark];
Run Code Online (Sandbox Code Playgroud)
而且,果然,我得到一个NSToolbar带有黑色窗口标题栏的黑色.因此看起来它正常工作,但是当我的滚动视图滚动其内容(图像的缩略图)时NSToolbar,窗口标题栏下的标准半透明要么不存在,要么随机出现.似乎没有任何模式.有时当我滚动滚动视图时,内容在工具栏和标题栏下以"模糊"状态显示.其他时候滚动时,工具栏和标题栏只是一个不透明的黑色.(标题栏和工具栏仍然绘制其标题和按钮.)
当我没有为窗口的内容视图请求图层时,我得到的是更多的灰色标题栏和窗口标题,而不是"纯"的黑色标题栏.(我的scrollview的背景颜色可以是白色,深灰色或黑色.)
任何帮助或澄清如何正确配置NSWindow(包含NSToolbar和一个NSScollView)使用新的活力外观将非常感激.
我从我的主要NSWindow开了一个NSWindow.
DropHereWindowController *dropHereWindowController = [[DropHereWindowController alloc] initWithWindowNibName:@"DropHereWindow"];
[dropHereWindowController showWindow:nil];
Run Code Online (Sandbox Code Playgroud)
将文件从finder拖到"DropHereWindow"时,我希望此窗口保持在主窗口的顶部.然而,当打开取景器(不再有焦点)时,我的"DropHereWindow"就在我的主窗口后面.
我尝试了orderFront,makeKey,makeKeyAndFront,但没有任何帮助.我能做些什么呢?
nswindow ×10
cocoa ×9
objective-c ×7
macos ×5
appkit ×2
nsview ×2
window ×2
focus ×1
fullscreen ×1
mouseevent ×1
osx-lion ×1
osx-yosemite ×1
size ×1
titlebar ×1