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
Hey Mark. Bạn đã giải quyết nó? –
Không, vẫn không hoạt động –