Xcode 为什么';t金属渲染我的简单清晰窗口代码?
我一直在学习教程。我下载了源代码并尝试将其“翻译”到Swift。这是我的“翻译”代码: 因此,我将AAPLRenderer和AAPLViewControllers放在一个文件中,并使其没有头文件。我将带有@IBOutlet的视图链接到视图控制器,因为该视图是一个NSView,我无法将其强制转换到MTKView,而不会得到编译时错误。AppDelegate是原始的,我没有主文件Xcode 为什么';t金属渲染我的简单清晰窗口代码?,xcode,gpu,metal,metalkit,Xcode,Gpu,Metal,Metalkit,我一直在学习教程。我下载了源代码并尝试将其“翻译”到Swift。这是我的“翻译”代码: 因此,我将AAPLRenderer和AAPLViewControllers放在一个文件中,并使其没有头文件。我将带有@IBOutlet的视图链接到视图控制器,因为该视图是一个NSView,我无法将其强制转换到MTKView,而不会得到编译时错误。AppDelegate是原始的,我没有主文件 最后我看到的窗口不显示红色,而是什么也不显示。我不明白为什么会这样。请帮帮我,谢谢。嗯,可能是任何东西。但是,我要检查的
最后我看到的窗口不显示红色,而是什么也不显示。我不明白为什么会这样。请帮帮我,谢谢。嗯,可能是任何东西。但是,我要检查的第一件事是,红色的alpha设置应该是alpha=1.0,而不是alpha=0.0。我看到两个问题 1)
MTKView
的delegate
属性是一个弱var
,这意味着如果您不保留渲染器的实例,它将立即被删除,并且永远不会收到任何委托回调。将对渲染器的引用保留为视图控制器上的属性
class MetalViewController: NSViewController {
@IBOutlet var inview: MTKView!
var renderer: Renderer!
override func viewDidLoad() {
// ...
let view: MTKView = self.inview
// ...
renderer = initView(view: view)
view.delegate = renderer
// ...
}
}
2) 由于呈现程序
类没有明确声明与MTKViewDelegate
协议的一致性,因此将其指定为视图委托时的条件转换失败。使渲染器显式符合协议,并删除条件强制转换,如上所示
class Renderer: NSObject, MTKViewDelegate
这很有效,谢谢。但是,为什么我必须保留渲染器?它不是在视图的委托中吗?听起来您可能不理解强引用和弱引用之间的区别。你可以。谢谢你,不过这是个问题。
class Renderer: NSObject, MTKViewDelegate