【问题标题】:Cocoa - Modal Window With Animating NSOpenGLView behind itCocoa - 带有动画 NSOpenGLView 的模态窗口
【发布时间】:2010-10-10 06:18:33
【问题描述】:

我有一个包含 NSOpenGLView 子类 (GameView) 的 NSWindow 子类 (GameWindow)。

应用是窗口化的(不会全屏显示)。

GameView 中的 OpenGL 动画由计时器每秒触发约 30 次。

出于演示的原因,无论应用中发生什么其他情况,GameView 动画都必须继续。它应该停止的唯一时间是在发生致命错误的情况下。

当 GameWindow 中的动画继续播放时,我需要呈现各种“模态”Cocoa 窗口(例如选择新游戏、确认退出等)。其中一些可能是工作表,但主要的需要显示为独立窗口(包含 WebView)。

我的问题:如何显示这些“对话框”窗口,以便我的应用程序计时器继续触发,我的动画继续,但用户在 GameWindow 中对 GameView 的输入被阻止,直到用户关闭“对话框”窗口?

(这个时候需要支持虎+豹)。

【问题讨论】:

    标签: cocoa opengl animation modal-dialog


    【解决方案1】:

    您是否尝试过常规的工作表/对话技巧?他们应该在这种情况下工作得很好。计时器被安排为运行循环的一部分,当您有模态表或窗口时它不会停止,因此它应该能够在事件被阻止时继续在后台渲染。

    [NSApp beginSheet:sheetWindow modalForWindow:mainWindow modalDelegate:nil didEndSelector:NULL contextInfo:nil];
    

    (如果需要,请填写您自己的委托和结束选择器。)

    【讨论】:

    • 哦,我明白了!我曾相信在我的工作表或“对话框”窗口上调用 -modalForWindow 会阻止计时器和事件到我的 GameWindow,直到用户关闭对话框。我会试一试。非常感谢您的帮助乔尔和您的超快速反应。
    【解决方案2】:

    如果您想保留当前的模态窗口(不移动到工作表),您可以尝试在默认的 runloop 模式 (NSDefaultRunLoopMode) 之外自行安排 NSTimer,该模式会在 runloop 停止运行时立即挂起。

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多