UIModalPresentationCurrentContext - 旋转方法未被调用

6

我正在尝试使用UIModalPresentationCurrentContext在一个VC上显示另一个VC,以便看到它后面的视图。以下代码可行:

UIViewController *transparentViewController = [[UIViewController alloc] init];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:transparentViewController animated:NO completion:^{
}];

然而,当我推送VC后旋转设备时,旋转看起来完全混乱。它不是干净地旋转,而是尴尬地拉伸视图以适应新方向。

此外,当我子类化transparentViewController时,我发现它的viewwillautorotate方法没有被调用!(即使它以其混乱的动画方式旋转)

UIModalPresentationCurrentContext样式是否不能旋转?有没有办法解决这个问题?还有其他人遇到过这个问题吗?


你找到解决办法了吗?我也遇到了同样的问题。 - stonemonk
同样的问题。解决方案是什么? - Jean Le Moignan
1个回答

0

我认为这个问题与原始视图控制器无法旋转有关,因此您的模态视图控制器也被阻止旋转。为了解决这个问题,您可以使用renderInContext方法将原始UIViewControllerCALAyer渲染成一个UIImage,然后将其放置在模态视图控制器中视图层次结构的底部的UIImageView中。这将产生这样的效果:视图控制器将呈现透明状态,因为您在一个虚假的静态图像中看到了它后面的内容。然后,当UIViewController旋转时,您可以手动应用CGAffineTransformUIImageView上,使背景保持不变,而其上方的内容则可以自由旋转。


D,感谢您的回复。在这种情况下,原始视图控制器能够旋转,但是它的行为不管是否允许旋转都是相同的。您提出的解决方案很好,但是如果背后的视图更新了怎么办?最好利用透明度。此外,屏幕截图上的CGAffineTransform仍然会“旋转”以抵消设备旋转,这将显示一种动画效果,如果背景明显无法旋转,则不会发生。 - Zach Whelchel
啊,我误解了原始视图控制器可以旋转的问题。我不确定如何解决这个问题。 - DHamrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接