2016-09-18 12 views
6

Tôi đang cố gắng đặt hình ảnh vào UITableViewCell bằng GLKView để vẽ hình ảnh.GLKView trống khi được vẽ

Tôi có một ô mẫu trong bảng phân cảnh, trong đó tôi có GLKView. Nó không có Enable setNeedsDisplay được chọn.

Các tế bào nguyên mẫu có một lớp tùy chỉnh được gọi PhotoTableViewCell đó là

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") 
    } 
} 

này được sử dụng trong một 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 
} 

Khi tôi tìm đến TableView tôi nhận được những điều khoản đăng nhập sau

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>>) 

Câu hỏi của tôi là lý do khiến chế độ xem trống? Tôi chắc chắn rằng có một hình ảnh, rằng glkView là ở đúng nơi (tôi đã kiểm tra nó với công cụ xem trước trong Xcode)

Tại sao vẽ (rect :) được gọi và không glkView (xem: GLKView, drawIn rect: CGRect)?

Tôi đang sử dụng Xcode 8, nhanh chóng 3 trên iPhone 5 chạy iOS 9.3, bất kỳ sự giúp đỡ rất nhiều đánh giá cao

+0

Hey Mark. Bạn đã giải quyết nó? –

+0

Không, vẫn không hoạt động –

Trả lời

1

Tôi không chắc chắn nếu Xcode xử lý này sẽ tự động bằng cách nào đó hoặc nếu bối cảnh là theo mặc định được kích hoạt, nhưng trong tôi chỉ có dự án OpenGL mà tôi đã thực hiện cho đến nay, tôi đã phải sử dụng:

[EAGLContext setCurrentContext:ciContext]; 

bất cứ khi nào tôi cần ngữ cảnh của mình hoạt động.

Các vấn đề liên quan