事件在透明 NSWindow 中的 NSView 中不起作用
Posted
技术标签:
【中文标题】事件在透明 NSWindow 中的 NSView 中不起作用【英文标题】:Events not working in NSView in transparent NSWindow 【发布时间】:2011-02-10 21:15:24 【问题描述】:我一直在使用这个代码...
static const CGFloat kSwipeGestureLeft = 1.0;
static const CGFloat kSwipeGestureRight = -1.0;
static const CGFloat kSwipeGestureUp = 1.0;
static const CGFloat kSwipeGestureDown = -1.0;
- (void)swipeWithEvent:(NSEvent *)event
if ([event deltaX] == kSwipeGestureLeft)
NSLog(@"LEFT SWIPE!");
else if ([event deltaX] == kSwipeGestureRight)
NSLog(@"RIGHT SWIPE!");
else if ([event deltaY] == kSwipeGestureUp)
NSLog(@"UP SWIPE!");
else if ([event deltaY] == kSwipeGestureDown)
NSLog(@"DOWN SWIPE!");
else
[super swipeWithEvent:event];
在 NSView 中,它在 Interface Builder 中发送到后面,在我制作的窗口内 通过代码实现strong>部分透明。 但是,它**似乎只在不透明窗口内工作,而不是在透明窗口内。
为什么?我怎样才能解决这个问题?如果我不能做到这一点,我仍然可以,比如拍摄整个屏幕然后将其设置(稍微变暗)作为窗口的背景?
我尝试将 NSWindow** 子类化并将其放入,但它仍然不起作用。
我使用的代码实际上并没有使窗口透明,只是将其背景颜色更改为透明:
//Set up the window
[window setLevel:kCGNormalWindowLevel];
[window setOpaque:NO];
[window setStyleMask:0];
[window setBackgroundColor:[NSColor colorWithCalibratedWhite:0.0 alpha:0.3]];
[window setAlphaValue:0];
//Resize the window to fill the screen
[window
setFrame:[window frameRectForContentRect:[[window screen] frame]]
display:YES
animate:YES];
//Fade the window in
[window makeKeyAndOrderFront:self];
[[window animator] setAlphaValue:1.0];
【问题讨论】:
你用什么代码来设置 NSWindow 的不透明度? 我现在已将其添加到问题中! :) 从您的外观看来,您似乎正在尝试全屏显示视图。在这种情况下,您是否考虑过使用 NSView 的 -enterFullScreenMode:withOptions: 方法而不是试图让窗口填满屏幕? 【参考方案1】:确保您的窗口实际上是关键窗口。也就是说,不要假设 makeKeyAndOrderFront 成功地使您的窗口成为关键窗口。有关详细信息,请参阅 -[NSWindow canBecomeKeyWindow] 方法(您可能必须为自定义窗口覆盖它才能返回 YES)。对于没有标题栏的窗口,我过去曾遇到过这个问题,不确定您是否遇到相同(或类似)的问题。
【讨论】:
我覆盖了自定义窗口并在窗口上也调用了“makeKeyWindow”,但它仍然不起作用。 :( 您是否在 NSWindow 子类中实现了 canBecomeKeyWindow 以始终返回 YES?它被调用了吗? 我实现了 canBecomeKeyWindow 以始终返回 YES,但是当我调用 makeKeyWindow 时,它说它不能......【参考方案2】:不要将 alpha 设置为 0,而是将其设置为像 0.01 这样的低值。对于完全透明的视图,事件会被忽略。
【讨论】:
好的,我将透明度设置为 0.01,但没有帮助。 不确定这是否有帮助,但请尝试在您的窗口上设置 setIgnoresMouseEvents:YES。【参考方案3】:你在使用 UIGestureRecognizer 吗?这似乎是目前使用的最简单的方法:)
【讨论】:
Mac OS X 上没有UIGestureRecognizer
。以上是关于事件在透明 NSWindow 中的 NSView 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
NSLayoutConstraint 防止 NSWindow 调整大小