首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSOpenGLView、NSWindow和NSResponder - makeFirstResponder不工作

NSOpenGLView、NSWindow和NSResponder - makeFirstResponder不工作
EN

Stack Overflow用户
提问于 2011-09-20 02:13:36
回答 3查看 1.7K关注 0票数 4

在下面的代码中,我初始化了一个NSViewController a NSResponder,一个NSWindow,一个NSOpenGLView,呈现视图,并尝试将NSViewController设置为windows first responder。

它不起作用。我也希望能够在下面的keyUp:keyDown:方法中找到一个断点,但是什么也没有发生。

我是不是遗漏了什么?

代码语言:javascript
复制
-(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;
}
EN

回答 3

Stack Overflow用户

发布于 2011-10-24 17:58:27

回到这个问题,实际上问题在其他地方。

我一直在使用这个睡眠功能来控制应用程序的帧率:

代码语言:javascript
复制
void System::Sleep(double seconds)
{
    NSDate* limit       = [NSDate dateWithTimeIntervalSinceNow:seconds];
    NSRunLoop* runLoop  = [NSRunLoop currentRunLoop];

    [runLoop runUntilDate:limit];
}

这样做似乎完全冻结了系统,并阻止了关键事件。

取而代之的是使用下面的代码来调度更新函数:

代码语言:javascript
复制
[NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(updateApp:) userInfo:nil repeats:YES];
票数 3
EN

Stack Overflow用户

发布于 2011-09-21 02:53:16

要使实例参与键视图循环,自定义视图必须从acceptsFirstResponder.返回YES

票数 2
EN

Stack Overflow用户

发布于 2013-03-28 08:04:19

我也有这个问题。这个帖子可能会有帮助

keyDown not being called

我找出了阻止keyDown事件被调用的原因。它是NSBorderlessWindowMask的掩码,它阻止了窗口成为关键和主窗口。因此,我创建了一个名为BorderlessWindow的NSWindow子类:

代码语言:javascript
复制
 @interface BorderlessWindow : NSWindow { }

 @end

 @implementation BorderlessWindow

 - (BOOL)canBecomeKeyWindow {
     return YES; }

 - (BOOL)canBecomeMainWindow {
     return YES; }

 @end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7475394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档