Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 为什么';t金属渲染我的简单清晰窗口代码?_Xcode_Gpu_Metal_Metalkit - Fatal编程技术网

Xcode 为什么';t金属渲染我的简单清晰窗口代码?

Xcode 为什么';t金属渲染我的简单清晰窗口代码?,xcode,gpu,metal,metalkit,Xcode,Gpu,Metal,Metalkit,我一直在学习教程。我下载了源代码并尝试将其“翻译”到Swift。这是我的“翻译”代码: 因此,我将AAPLRenderer和AAPLViewControllers放在一个文件中,并使其没有头文件。我将带有@IBOutlet的视图链接到视图控制器,因为该视图是一个NSView,我无法将其强制转换到MTKView,而不会得到编译时错误。AppDelegate是原始的,我没有主文件 最后我看到的窗口不显示红色,而是什么也不显示。我不明白为什么会这样。请帮帮我,谢谢。嗯,可能是任何东西。但是,我要检查的

我一直在学习教程。我下载了源代码并尝试将其“翻译”到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