2012-11-12 23 views
9

Tôi đang học OpenGLES và tôi đang cố gắng để đặt một GLKViewer bên trong một UIViewController.glkView drawInRect không được gọi là

Tôi biết tôi có thể gặp vấn đề chính bằng cách sử dụng GLViewController, nhưng tôi đang cố gắng tìm hiểu cách thực hiện theo cách này.

Tôi đã tìm thấy câu hỏi này, Nesting GLKView into UIViewControllerNested GLKView and GLKViewController nhưng tôi phải thiếu một số thứ mặc dù tôi nghĩ rằng tôi đang làm tất cả các bước phù hợp bởi vì khi tôi chạy dự án của mình, tôi không nhận được dòng in drawInRect.

Trong bảng phân cảnh, tôi chỉ cho ViewController là đại biểu của thành phần glkview.

tôi đã cố gắng để giữ cho các mã như đơn giản càng tốt và bất kỳ trợ giúp sẽ được apreciated:

MyController.h

#import <Foundation/Foundation.h> 
#import <GLKit/GLKit.h> 

@interface MyGLController : UIViewController <GLKViewDelegate> 
{ 
    GLuint vertexBufferID; 

} 

@property (weak, nonatomic) IBOutlet GLKView *glview; 

@property (strong, nonatomic) GLKBaseEffect *baseEffect; 

@end 

MyGLController.m

#import "MyGLController.h" 

@implementation MyGLController 

//@synthesize baseEffect; 

-(void) viewDidLoad{ 
    [super viewDidLoad]; 

    self.glview.context = [[EAGLContext alloc] initWithAPI: 
    kEAGLRenderingAPIOpenGLES2]; 

    [EAGLContext setCurrentContext:self.glview.context]; 
    printf("View Loaded"); 
} 


- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect 
{ 
    printf("DrawInRect"); 
} 

@end 

* Cập nhật *

Theo như tôi có thể nói glkview được nối đúng theo đề xuất và thêm josh-knapp và được gọi là setNeedsDisplay.

Trong trường hợp có điều gì đó tôi mất tích, tôi đã tải lên một bản sao của dự án ở đây: https://github.com/jcrogel/OpenGLDebug.git

Tôi là một tổng Noob trong này vì vậy tôi xin lỗi vì bất kỳ sự giám sát ngớ ngẩn :)

+0

Ok Tôi đã nhận thấy rằng tôi đã nhận được phiếu bầu 'gần' và 2 phiếu bầu không có giải thích thêm về những gì sai trong câu hỏi hoặc câu hỏi của tôi sẽ tốt hơn thế nào. Bất kỳ thông tin phản hồi để lấy lại điểm của tôi sẽ được đánh giá cao. –

+2

Tôi nghĩ rằng downvoters nên giải thích lý do của họ thay vì mù quáng đánh dấu điều này cho gần. OP rõ ràng đã thực hiện một nỗ lực ở đây để cung cấp cả một lời giải thích và mã. Một nhận xét đơn giản yêu cầu thông tin bị thiếu sẽ giúp ích. – jdi

+1

Đối với tôi, tôi đã không khởi tạo với một bối cảnh và đó là lý do tại sao nó không được gọi. –

Trả lời

9

Bạn didn' t nói rằng bạn nối các tài sản glview của MyGLController trong storyboard, để xác minh điều đó.

Tiếp theo, bạn đang thiết lập bối cảnh glview sau khi tải. Nếu không có một GLKViewController, không có gì nói cho glview nó cần phải được rút ra. Đảm bảo bạn gọi [self.glview setNeedsDisplay] ở đâu đó sau khi bối cảnh được thiết lập.

+0

Cảm ơn tôi đã thử nhưng nó không hoạt động, tôi đã cập nhật câu hỏi với thông tin bổ sung và liên kết tới repo github mà tôi đã thêm vào với dự án đó –

+0

Chỉ cần làm rõ, cuộc gọi tôi cần làm là: self.glview.setNeedsDisplay = YES; –

+2

Điều đó phải là: self.glview.enableSetNeedsDisplay = YES; – inwit

1

Tôi thấy câu hỏi này đã được trả lời. Nhưng tôi đã có cùng một vấn đề, với một giải pháp khác. Tôi nghĩ rằng tôi muốn đăng thông tin ở đây trên cơ hội off những người khác có thể được hưởng lợi từ nó.

Mô tả vấn đề

Trong khi sử dụng GLKView và GLKViewController, chức năng làm cho vòng lặp (drawInRect) được gọi một lần, nhưng không được gọi một lần nữa.

thể Nguyên nhân

Một số phương pháp để CViewController đã được thực hiện không đúng cách, mà không gọi supers của họ. Đoạn mã sau minh họa ba chức năng như vậy. Các ví dụ dưới đây có ba chức năng được triển khai chính xác, gọi cho người thay thế của họ.

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:NO]; 
} 

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:NO]; 
} 
-(void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:NO]; 
} 
6

Tôi gặp sự cố tương tự.

Theo mặc định, xcode đặt hộp kiểm enable setNeedsDisplay thành NO trong GLKView danh sách đặc tính.
Khi tôi thay đổi, nó đã hoạt động.

+0

Cảm ơn bạn rất nhiều. Bạn đã cứu tôi. Tôi gặp vấn đề tương tự. Chọn hộp đã khắc phục sự cố. – techgentsia

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