我有一个包含NSOpenGLView子类(GameView)的NSWindow子类(GameWindow)。
应用程序已窗口化(不会全屏显示)。
GameView中的OpenGL动画每秒被定时器发射约30次。
出于演示原因,无论应用程序中发生了什么,GameView动画都必须继续。它应该停止的唯一时间是致命错误。
我需要在GameWindow中的动画继续呈现各种“模态”Cocoa窗口(例如选择新游戏,确认退出等)。其中一些可能是工作表,但主要的需要显示为独立的窗口(与WebViews一起使用)。
我的问题:如何显示这些“对话框”窗口,以便我的应用程序计时器继续触发,我的动画继续,但用户对GameWindow中GameView的输入被阻止,直到用户关闭“对话框”窗口?
(此时我需要支持Tiger + Leopard)。
答案 0 :(得分:1)
您是否尝试过常规的表格/对话技巧?他们应该适应这种情况。计时器被安排为运行循环的一部分,当你有一个模态工作表或窗口时它不会停止,因此它应该能够在事件被阻止时继续在后台渲染。
[NSApp beginSheet:sheetWindow modalForWindow:mainWindow modalDelegate:nil didEndSelector:NULL contextInfo:nil];
(如果需要,请填写您自己的代表和结束选择器。)
答案 1 :(得分:0)
如果你想保留当前的模态窗口(不移动到工作表),你可以尝试在默认的runloop模式(NSDefaultRunLoopMode)之外自己安排NSTimer,它会在runloop停止运行时立即挂起。