在下面的代码中,我初始化了一个NSViewController a NSResponder,一个NSWindow,一个NSOpenGLView,呈现视图,并尝试将NSViewController设置为windows first responder。
它不起作用。我也希望能够在下面的keyUp:和keyDown:方法中找到一个断点,但是什么也没有发生。
我是不是遗漏了什么?
-(void)initwithFrame:(CGRect)frame
{
window = [[MyNSWindow alloc] initWithContentRect:frame styleMask:NSClosableWindowMask | NSTitledWindowMask backing:NSBackingStoreBuffered defer: YES ];
OpenGLView* glView = [[[OpenGLView alloc] initWithFrame:window.frame] autorelease];
window.contentView = glView;
[window makeFirstResponder:self];
[window makeKeyWindow];
[window display];
}
-(void)keyDown:(NSEvent*)theEvent
{
unichar unicodeKey = [ [ theEvent characters ] characterAtIndex:0 ];
unicodeKey = 0;
}
-(void)keyUp:(NSEvent *)theEvent
{
unichar unicodeKey = [ [ theEvent characters ] characterAtIndex:0 ];
unicodeKey = 0;
}发布于 2011-10-24 17:58:27
回到这个问题,实际上问题在其他地方。
我一直在使用这个睡眠功能来控制应用程序的帧率:
void System::Sleep(double seconds)
{
NSDate* limit = [NSDate dateWithTimeIntervalSinceNow:seconds];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
[runLoop runUntilDate:limit];
}这样做似乎完全冻结了系统,并阻止了关键事件。
取而代之的是使用下面的代码来调度更新函数:
[NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(updateApp:) userInfo:nil repeats:YES];发布于 2011-09-21 02:53:16
要使实例参与键视图循环,自定义视图必须从acceptsFirstResponder.返回YES
发布于 2013-03-28 08:04:19
我也有这个问题。这个帖子可能会有帮助
我找出了阻止keyDown事件被调用的原因。它是NSBorderlessWindowMask的掩码,它阻止了窗口成为关键和主窗口。因此,我创建了一个名为BorderlessWindow的NSWindow子类:
@interface BorderlessWindow : NSWindow { }
@end
@implementation BorderlessWindow
- (BOOL)canBecomeKeyWindow {
return YES; }
- (BOOL)canBecomeMainWindow {
return YES; }
@endhttps://stackoverflow.com/questions/7475394
复制相似问题