我正在尝试创建自定义转换,以替代您在此处获得的默认转换,例如:
[self.navigationController pushViewController:someController animated:YES];
我准备了一个基于OpenGL的视图,它对映射到平面的一些静态纹理执行效果(假设它是Core Animation中翻转效果的副本)。我不知道该怎么办:
非常感谢任何想法或链接!
更新
Jeffrey Forbes的答案非常适合捕捉视图内容的解决方案。
我还没想到的是如何捕获我想要转换到的视图的内容,在转换完成之前该视图应该是不可见的。
另外,我应该使用哪种方法来呈现OpenGL视图? 出于演示目的,我使用了pushViewController。这会影响导航栏,但实际上我想用动画回一个项目,请查看此视频以获得解释:
另一个选择是使用presentViewController,但显示全屏。 你认为创建另一个窗口(或视图吗?)可能有用吗?
答案 0 :(得分:3)
虽然我没有对自己进行更多的研究而无法完全回答你的问题,但我可以帮助一下:
- 为了获取UINavigationController的视图,您需要截取屏幕截图。最简单的方法是将其抓入UIImage:
UIGraphicsBeginImageContext(self.view.frame.size);
[[self.view layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage* test = UIGraphicsGetImageFromCurrentImageContext();
UIImageView* view = [[UIImageView alloc] initWithImage:test];
UIGraphicsEndImageContext();
我不确定你是否可以将GLContext(手机上不熟悉)渲染成CGImage,但我会做那样的事情(并从中初始化UIImage)。我会预渲染你想要做的动画的每一帧,并使用其中提供的动画内容将其拍成UIImageView。也就是说,如果你的动画足够简单。否则,它可能归结为编写自己的动画功能: - /
答案 1 :(得分:3)
答案 2 :(得分:1)
我认为您可能想到的功能是http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage2D.xml ...您将视口设置为纹理大小然后照常绘制,然后执行glCopyTexImage2D将场景复制到纹理上。
或者您应该查看FrameBuffer对象。 XCode中的默认OpenGL模板使用这些。只需生成示例项目,看看它们是如何工作的。
答案 3 :(得分:0)
我最近在像你这样的视图控制器之间写了一些过渡动画。如果您想从隐形视图中获取任何额外信息,可以尝试延迟转换,如下所示:
- (void)animationFromModalView:(UIView *)modalView toMasterView:(UIView *)masterView
{
[masterView setNeedsLayout];
[masterView layoutIfNeeded];
[self performSelector:@selector(delayAnimationFromModalViewToMasterView) withObject:nil afterDelay:.1f];
}