重叠另一个应用程序后,Cocoa应用程序不会重绘

时间:2012-09-26 14:15:18

标签: objective-c macos cocoa drawrect

在我将应用程序覆盖到以前的应用程序之后,我回到之前的应用程序并遇到一些错误:

  • 某些成分已经消失
  • 使组件可见的唯一方法是调整窗口大小
  • 似乎重绘了整个画布。

  1. 奇怪的是,只有一些组件和绘制的图像缺失
  2. 并非总是发生但只有几次
  3. 我没有找到重现问题的可靠方法。
  4. 任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题(只有在调整大小后才能正确更新视图),除了我在OSX游戏中使用OpenGL绘图。

通过添加以下内容解决了我的问题:

GLint vblSynch = 1;
[[self openGLContext] setValues:&vblSynch forParameter:NSOpenGLCPSwapInterval];

在我的自定义NSOpenGLView init方法中。 然后我实施了:

- (void)drawRect:(NSRect)rect
{
    [self destroyFramebuffer]; // glDeleteFramebuffers..
    [self createFramebuffer];  // [super prepareOpenGl], glGenFrame(Render)Buffers, bind buffers, etc
    [self drawView]; // [[self openGLContext] makeCurrentContext], make some drawing, [[self openGLContext] flushBuffer]..
}
像这样。

在这些更改之后,当窗口获得焦点时,它会自行重绘(没有任何调整大小的东西:))。

希望这有帮助!

相关问题