2008-11-21 44 views
9

Tôi đang cố gắng để tạo ra một sự chuyển đổi tùy chỉnh, để phục vụ như một sự thay thế cho một sự chuyển đổi mặc định, bạn sẽ nhận được ở đây, ví dụ:chuyển view Tuỳ chỉnh trong OpenGL ES

[self.navigationController pushViewController:someController animated:YES]; 

tôi đã chuẩn bị một OpenGL-based xem đó thực hiện một hiệu ứng trên một số kết cấu tĩnh ánh xạ tới một mặt phẳng (giả sử đó là một bản sao của hiệu ứng lật trong Core Animation). Những gì tôi không biết làm thế nào để làm là:

  • lấy nội dung xem hiện tại và tạo ra một kết cấu ra khỏi nó (Tôi nhớ nhìn thấy một chức năng mà không chỉ vậy, nhưng không thể tìm thấy nó)
  • cách để thực hiện tương tự cho chế độ xem hiện không có màn hình và sẽ thay thế chế độ xem hiện tại
  • có một số API mà tôi có thể kết nối để làm cho lớp chuyển đổi của tôi trở thành bản địa nhất có thể (làm cho nó trở thành một loại hiệu ứng Hoạt ảnh cốt lõi) ?

Bất kỳ suy nghĩ hoặc liên kết nào được đánh giá cao!

CẬP NHẬT

câu trả lời Jeffrey Forbes của các công trình lớn như một giải pháp để nắm bắt được nội dung của một cái nhìn.

Điều tôi chưa tìm ra là cách nắm bắt nội dung của chế độ xem mà tôi muốn chuyển đổi thành nội dung cần ẩn đi cho đến khi quá trình chuyển đổi hoàn tất.

Ngoài ra, tôi nên sử dụng phương pháp nào để trình bày chế độ xem OpenGL? Đối với mục đích trình diễn, tôi đã sử dụng pushViewController. Tuy nhiên, điều đó ảnh hưởng đến thanh điều hướng, mà tôi thực sự muốn quay lại một mục, với hoạt ảnh, hãy xem vid này để được giải thích:

http://vimeo.com/4649397.

Một tùy chọn khác sẽ là đi với presentViewController, nhưng điều đó cho thấy toàn màn hình. Bạn có nghĩ rằng việc tạo một cửa sổ khác (hoặc xem?) Có thể hữu ích không?

Trả lời

3

Trong khi tôi không thể hoàn toàn trả lời câu hỏi của bạn mà không làm một số nghiên cứu thêm của riêng tôi, tôi có thể giúp một chút:

-Trong để có được quan điểm của một UINavigationController, bạn cần phải thực hiện một ảnh chụp màn hình. Cách dễ nhất để làm điều này là bởi grabbing nó thành một UIImage:

UIGraphicsBeginImageContext(self.view.frame.size); 
[[self.view layer] renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* test = UIGraphicsGetImageFromCurrentImageContext(); 
UIImageView* view = [[UIImageView alloc] initWithImage:test]; 
UIGraphicsEndImageContext(); 

Tôi không chắc chắn nếu bạn có thể làm cho một GLContext (không quen thuộc trên điện thoại) vào một CGImage, nhưng tôi sẽ làm một cái gì đó như thế (và bắt đầu một UIImage từ đó). Tôi sẽ giới thiệu trước mọi khung hình của hoạt ảnh mà bạn đang cố gắng thực hiện và tát nó vào một UIImageView bằng cách sử dụng công cụ hoạt hình được cung cấp bên trong. Tức là, nếu hoạt hình của bạn đủ đơn giản. Nếu không, có thể bạn sẽ viết chức năng hoạt ảnh của riêng mình: -/

+0

Cảm ơn lời khuyên của bạn và xin lỗi vì phản ứng phụ chậm của tôi! Bạn có thể kiểm tra câu hỏi được cập nhật, có thể bạn sẽ có thêm một số lời khuyên? – melfar

1

Tôi nghĩ chức năng bạn có thể nghĩ là http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage2D.xml ... bạn đặt chế độ xem thành kích thước và sau đó vẽ như bình thường, sau đó thực hiện glCopyTexImage2D để sao chép cảnh vào một kết cấu.

hoặc bạn nên xem xét các đối tượng FrameBuffer. Mẫu OpenGL mặc định trong XCode sử dụng các mẫu này. Chỉ cần tạo dự án mẫu để xem cách hoạt động của dự án đó.

3

Tôi vừa kết hợp một lớp chuyển tiếp để triển khai hoạt ảnh chuyển tiếp của riêng bạn trong OpenGL ES.

Hãy đọc về nó here

Có hai chuyển dụ trong dự án, cảm thấy tự do để thêm bạn sở hữu nó.

0

Gần đây tôi viết một số bộ điều khiển chế độ xem hoạt ảnh chuyển tiếp giống như bạn. Nếu bạn muốn nhận thêm bất kỳ thông tin nào từ chế độ xem ẩn, bạn có thể thử trì hoãn quá trình chuyển đổi như sau:

- (void)animationFromModalView:(UIView *)modalView toMasterView:(UIView *)masterView 
{ 

[masterView setNeedsLayout]; 
[masterView layoutIfNeeded]; 

[self performSelector:@selector(delayAnimationFromModalViewToMasterView) withObject:nil afterDelay:.1f]; 
}