我想在应用程序退出活动时立即将MTKView(或GLKView / CAEAGLLayer)的内容设置为黑色。将其设置为透明颜色(例如黑色)并显示它的最快,最可靠的方法是什么?

最佳答案

为了在进入背景时清空MTKView,必须在从委托回调返回到applicationDidEnterBackground(_:)对象上的UIApplicationDelegate方法之前渲染空白帧。

收听UIApplication.didEnterBackgroundNotification是不够的。在通知状态更改通知观察者之前捕获快照。

这意味着您应该将应用程序已将背景输入的消息从应用程序委托传递到相关的视图控制器,并强制它们立即呈现空白帧,然后再从委托方法返回(这意味着没有发布通知) ,并且不会将异步分配到不同的线程)。这是一种将MTKView清除为黑色,并在返回之前等待计划图形和演示文稿的方法:

func drawBlankAndWait(_ mtkView: MTKView) {
    mtkView.clearColor = MTLClearColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
    let commandBuffer = commandQueue.makeCommandBuffer()!
    guard let renderPassDescriptor = mtkView.currentRenderPassDescriptor else { return }
    let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: renderPassDescriptor)!
    renderEncoder.endEncoding()
    let drawable = mtkView.currentDrawable!
    commandBuffer.present(drawable)
    commandBuffer.commit()
    commandBuffer.waitUntilScheduled()
}


收到applicationWillEnterForeground(_:)调用后,您可以恢复进入背景时可能已设置的任何状态,包括视图的暂停状态。

关于ios - MTKView清晰显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57557966/

10-09 13:30