OpenGL ES中的自定义视图转换

mel*_*far 9 iphone animation opengl-es

我正在尝试创建自定义转换,以替代您在此处获得的默认转换,例如:

[self.navigationController pushViewController:someController animated:YES];
Run Code Online (Sandbox Code Playgroud)

我准备了一个基于OpenGL的视图,它对映射到平面的一些静态纹理执行效果(假设它是Core Animation中翻转效果的副本).我不知道该怎么做:

  • 抓取当前视图内容并从中创建一个纹理(我记得看到一个功能就是这样,但找不到它)
  • 如何对当前屏幕外的视图执行相同操作并将替换当前视图
  • 是否有一些我可以挂钩的API,以使我的过渡类尽可能本地化(使其成为一种核心动画效果)?

非常感谢任何想法或链接!

UPDATE

Jeffrey Forbes的答案非常适合作为捕获视图内容的解决方案.

我还没想到的是如何捕获我想要转换到的视图的内容,在转换完成之前,该视图应该是不可见的.

另外,我应该使用哪种方法来呈现OpenGL视图?出于演示目的,我使用了pushViewController.这会影响导航栏,但实际上我想用一个动画回到一个项目,请检查此视频以获得解释:

http://vimeo.com/4649397.

另一个选择是使用presentViewController,但显示全屏.你认为创建另一个窗口(或视图?)可能有用吗?

Jef*_*bes 3

虽然如果我自己不做更多研究,我无法完全回答你的问题,但我可以提供一些帮助:

- 为了获得 UINavigationController 的视图,您需要进行屏幕截图。最简单的方法是将其抓取到 UIImage 中:

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

我不确定你是否可以将 GLContext (在手机上不熟悉)渲染到 CGImage 中,但我会做类似的事情(并从中初始化 UIImage)。我会预渲染您尝试执行的动画的每一帧,并使用其中提供的动画内容将其放入 UIImageView 中。也就是说,如果您的动画足够简单。否则,可能需要编写自己的动画函数:-/