2016-09-18 6 views
6

Ich versuche, Bilder in eine UITableViewCell mithilfe einer GLKView zu platzieren, um das Bild zu zeichnen.GLKView ist leer, wenn es gezeichnet wird

Ich habe eine Prototyp-Zelle in einem Storyboard, in dem ich eine GLKView habe. Es wurde nicht Enable setNeedsDisplay aktiviert.

Das hat Prototyp Zelle eine benutzerdefinierte Klasse PhotoTableViewCell genannt, die

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

Dies ist in einem UITableViewController verwendet wird

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 
} 

Als ich in die Tableview navigieren ich die folgenden Protokollanweisungen erhalten

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

Meine Fragen sind, warum es die Ansicht leer? Ich bin mir sicher, dass es ein Bild gibt, dass der glkView an der richtigen Stelle ist (ich habe es mit dem Vorschau-Tool in Xcode inspiziert)

Warum wird draw (rect :) aufgerufen und nicht glkView (view: GLKView, drawIn rect: CGRect)?

ich verwende Xcode 8, schnelle 3 auf einem iPhone 5 mit iOS 9.3, jede Hilfe sehr geschätzt

+0

Hey Mark. Hast du es gelöst? –

+0

Nein, funktioniert immer noch nicht –

Antwort

1

Ich bin nicht sicher, ob Xcode diese automatisch irgendwie behandelt oder wenn der Kontext standardmäßig aktiviert ist, aber in meinem nur OpenGL Projekt, das ich bisher gemacht habe, musste ich benutze:

[EAGLContext setCurrentContext:ciContext]; 

, wenn ich meinen Kontext benötigt, aktiv zu sein.

Verwandte Themen