我在一个由窗口控制器管理的窗口中有一个MTKView。当我第一次实例化窗口控制器和窗口时,MTKView调用我的代理的两个调用,drawInMTKView以首选速率调用:
- (void)drawInMTKView:(nonnull MTKView *)view
- (void)mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size
如果关闭窗口(而不是释放窗口,只是隐藏(,当我重新打开窗口时,当我调整MTKView的大小时,drawableSizeWillChange调用仍然被调用,但drawInMTKVview不再被调用。MTKView在其默认模式下运行,并具有自己的显示链接。由于drawInMTKView未被调用,因此可以相信MTKView中的私有displayLink变量有问题。
我正在OSX Mojave上运行Xcode 9.4.1,最近的2017 MacBook Pro
我创建了自己的CVDisplayLink回调,没有使用MTKView提供的回调来解决MTKView的可能问题。
我遇到了同样的问题,我通过从其超级视图中删除MTKView来解决它。当窗户亮的时候把它放回去。
- (BOOL)windowShouldClose:(NSWindow *)sender
{
[_metalPreview removeFromSuperview];
return YES;
}
这样就不需要创建自定义CVDisplayLink。