gpt4 book ai didi

ios - 绘制时 GLKView 为空白

转载 作者:可可西里 更新时间:2023-11-01 03:34:07 24 4
gpt4 key购买 nike

我正在尝试使用 GLKView 将图像放入 UITableViewCell 中以绘制图像。

我在 Storyboard中有一个原型(prototype)单元,其中有一个 GLKView。它没有选中启用 setNeedsDisplay。

原型(prototype)单元格有一个名为 PhotoTableViewCell 的自定义类

import UIKit
import GLKit

class PhotoTableViewCell: UITableViewCell {

var eaglContext:EAGLContext!
var ciContext:CIContext!
var myImage:CIImage!

@IBOutlet weak var photoGlView: GLKView!
@IBOutlet weak var timeLabel: UILabel!
@IBOutlet weak var cameraLabel: UILabel!
@IBOutlet weak var notesLabel: UILabel!

override func layoutSubviews() {
self.photoGlView.delegate = self
}

}

extension PhotoTableViewCell: GLKViewDelegate {
override func draw(_ rect: CGRect) {
let drawableRectSize = CGSize(width: 200, height: 200)// width: photoGlView.drawableWidth, height: photoGlView.drawableHeight)

let drawableRect = CGRect(origin: CGPoint.zero, size: drawableRectSize)
print("rect ->\(drawableRect)")
print("rect size -> \(drawableRectSize)")
ciContext.draw(myImage, in: drawableRect, from: myImage.extent)
print("drawing rect my image =\(photoGlView)")
}

func glkView(_ view: GLKView, drawIn rect: CGRect) {
let drawableRectSize = CGSize(width: view.drawableWidth, height: view.drawableHeight)
let drawableRect = CGRect(origin: CGPoint.zero, size: drawableRectSize)
ciContext.draw(myImage, in: drawableRect, from: myImage.extent)
print("drawing")
}
}

这在 UITableViewController 中使用

class PhotosTableViewController: UITableViewController {

var cameraId:Int = 1
var photos:[Photo] = []
var eaglContext:EAGLContext!
var ciContext:CIContext!

override func viewDidLoad() {
super.viewDidLoad()
self.eaglContext = EAGLContext(api: .openGLES2)
self.ciContext = CIContext(eaglContext: eaglContext!)

}

....

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "photoCell") as! PhotoTableViewCell
let photo = photos[indexPath.row]
if let image = photo.getLightImage() {
cell.ciContext = ciContext
cell.eaglContext = eaglContext
cell.myImage = image
cell.photoGlView.display()
}
cell.cameraLabel.text = AppService.shared.getCameraName(id: photo.cameraId)
cell.timeLabel.text = "Taken: \(photo.uploaded?.niceTime() ?? "")"
return cell
}

当我导航到 TableView 时,我得到以下日志语句

rect ->(0.0, 0.0, 200.0, 200.0)
rect size -> (200.0, 200.0)
drawing rect my image =Optional(<GLKView: 0x1560bed0; frame = (0 0; 191 253); clipsToBounds = YES; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceRGBColorSpace 0 0 0 1; layer = <CAEAGLLayer: 0x1560e530>>)
rect ->(0.0, 0.0, 200.0, 200.0)
rect size -> (200.0, 200.0)
drawing rect my image =Optional(<GLKView: 0x156044f0; frame = (0 0; 191 253); clipsToBounds = YES; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceRGBColorSpace 0 0 0 1; layer = <CAEAGLLayer: 0x15604610>>)

我的问题是为什么它的 View 是空白的?我确信有一个图像,glkView 在正确的位置(我已经用 Xcode 中的预览工具检查过它)

为什么调用 draw(rect:) 而不是 glkView( view:GLKView, drawIn rect:CGRect) ?

我在运行 iOS 9.3 的 iPhone 5 上使用 Xcode 8、swift 3,非常感谢任何帮助

最佳答案

我不确定 Xcode 是否以某种方式自动处理这个问题,或者上下文是否默认激活,但在我迄今为止所做的唯一 OpenGL 项目中,我不得不使用:

[EAGLContext setCurrentContext:ciContext];

每当我需要激活上下文时。

关于ios - 绘制时 GLKView 为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39563709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com