首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制时GLKView为空

绘制时GLKView为空
EN

Stack Overflow用户
提问于 2016-09-19 07:54:33
回答 1查看 570关注 0票数 7

我正在尝试使用GLKView将图像放置到UITableViewCell中来绘制图像。

我在故事板中有一个原型单元,其中我有一个GLKView。它没有选中Enable setNeedsDisplay。

原型单元格有一个名为PhotoTableViewCell的自定义类,它是

代码语言:javascript
复制
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中使用

代码语言:javascript
复制
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时,我得到以下日志语句

代码语言:javascript
复制
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>>)

我的问题是,为什么视图是空白的?我确信有一张图片,glkView在正确的位置(我已经用Xcode的预览工具检查过了)

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-09-29 19:02:56

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

代码语言:javascript
复制
[EAGLContext setCurrentContext:ciContext];

每当我需要我的上下文处于活动状态时。

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

https://stackoverflow.com/questions/39563709

复制
相关文章

相似问题

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