首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图在UIViewController中使用UIkit中的my UIkit使协议无法向可表示的

试图在UIViewController中使用UIkit中的my UIkit使协议无法向可表示的
EN

Stack Overflow用户
提问于 2020-07-12 21:37:35
回答 1查看 1.1K关注 0票数 1

我正在学习和制作一个简单的应用程序,使用图形API金属,我试图使我的视图控制器从UIKit显示在SwiftUI。我已经尝试将UIViewControllerRepresentable从我的ViewController类中提取出来,但是这一直会导致'UIViewController‘类型的错误不符合协议’UIViewController代言人‘。这很可能是因为我的ViewController现在抛出了来自非协议、非类类型'UIViewController‘的继承错误,因此它没有协议。那么,如何使包含所有金属代码的ViewController采用可表示的协议呢?

这是我的代码:

代码语言:javascript
运行
复制
//ContentView.swift
import SwiftUI

struct ContentView: View {
  var body: some View {
    UIViewController()
  } 
}

struct ContentView_Previews: PreviewProvider {
   static var previews: some View {
     ContentView()
   }
}

//UIViewController.swift
import SwiftUI
import UIKit

struct UIViewController: UIViewControllerRepresentable { //error: Type 'UIViewController' does not conform to protocol 'UIViewControllerRepresentable'
   func makeUIViewController(context: Context) -> ViewController{
      return ViewController()
   }
}

struct UIViewController_Previews: PreviewProvider {
  static var previews: some View {
      UIViewController()
  }
}

//ViewController.swift
import UIKit
import Metal

class ViewController: UIViewController { //error: Inheritance from non-protocol, non-class type 'UIViewController'
  var device: MTLDevice!
  var metalLayer: CAMetalLayer!

//created is the buffer to send the points over to gpu
var vertexBuffer: MTLBuffer!

//starts the render pipeline
var pipelineState: MTLRenderPipelineState!

//command queue
var commandQueue: MTLCommandQueue!

//timer to render the screen frame by frame
var timer: CADisplayLink!

//insuring the view is loaded so the device can actually be used
override func viewDidLoad() { //error: Method does not override any method from its superclass
  super.viewDidLoad()
    
  device = MTLCreateSystemDefaultDevice()
    
  metalLayer = CAMetalLayer()
  metalLayer.device = device
  metalLayer.pixelFormat = .bgra8Unorm
  metalLayer.framebufferOnly = true
  metalLayer.frame = view.layer.frame
  view.layer.addSublayer(metalLayer) //error: Use of unresolved identifier 'view'
  ....

ViewController中没有错误,直到我尝试在SwiftUI中显示它。

很抱歉成为IOS开发和图形的完全初学者,但感谢您提前提供帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-12 22:03:01

因为错误

类型'UIViewController‘不符合协议'UIViewControllerRepresentable’

我想你错过了https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable/updateuiviewcontroller(_:context:)协议中的UIViewControllerRepresentable方法

此外,调用struct UIViewController可能会导致一些名称冲突。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62866704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档