【问题标题】:Metal iOS gives compile errorMetal iOS 给出编译错误
【发布时间】:2015-12-31 06:45:21
【问题描述】:
import UIKit
import Metal
import QuartzCore

class ViewController: UIViewController {

var device: MTLDevice! = nil
var metalLayer: CAMetalLayer! = nil

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    device = MTLCreateSystemDefaultDevice()
    metalLayer = CAMetalLayer()          // 1
    metalLayer.device = device           // 2
    metalLayer.pixelFormat = .BGRA8Unorm // 3
    metalLayer.framebufferOnly = true    // 4
    metalLayer.frame = view.layer.frame  // 5
    view.layer.addSublayer(metalLayer)   // 6
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

当我在我的 ViewController.swift 中有这个时,即使我已经导入了 Metal 和 QuartzCore,我也会收到错误“使用未声明的类型 CAMetalLayer”。我怎样才能让这段代码工作?

【问题讨论】:

    标签: ios swift metal


    【解决方案1】:

    更新
    Simulator support is coming this year (2019)

    Xcode 11/iOS 13 之前的版本
    金属代码无法在模拟器上编译。尝试为设备编译。

    【讨论】:

    • 尝试在 Xcode 中选择设备而不是模拟器
    • 这个回复没有回答问题,因为没有问题,但是它是对所述问题的解决方案:模拟器无法编译金属代码。如果您选择一个设备,编译错误就会消失。
    • 如果你付出一点努力,就会有隐含的“如何解决它”的问题。
    • 在模拟器中构建时是否有任何选项可以消除此错误?
    • @souvickcse ,使用 Metal,没有模拟器。您必须绑定设备,故事结束!就是这样!我猜他们真的是指“金属”:)
    【解决方案2】:

    如果您的应用具有不依赖于 Metal 的后备或模式,并且您想为模拟器编译您的应用,您可以执行以下操作:

    #if targetEnvironment(simulator)
    // dummy, do-nothing view controller for simulator
    class ViewController: UIViewController {
    
    }
    #else
    class ViewController: UIViewController {
    
        var device: MTLDevice! = nil
        var metalLayer: CAMetalLayer! = nil
    
        override func viewDidLoad() {
            super.viewDidLoad()
            device = MTLCreateSystemDefaultDevice()
            metalLayer = CAMetalLayer()
            ...
        }
    
    }
    #endif
    

    那么您的代码至少会为设备和模拟器编译,这可以简化您的非 Metal 开发。

    【讨论】:

      【解决方案3】:

      如果您将 XCode 项目命名为“Metal”,可能会出现同样的问题。

      在这种情况下,编译器会感到困惑,您将收到相同的错误消息。

      【讨论】:

      • 我怀疑你得到的错误与 OP 所说的相同?
      • @trojanfoe 您可以轻松地重新检查它。错误是完全一样的
      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 2017-03-27
      • 2023-03-26
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2012-11-11
      • 2014-12-28
      相关资源
      最近更新 更多