我有一个我正在重复使用的视图控制器(出于内存限制的原因。)所以,我没有推送一个新的 UIViewController,而是设置了一些参数,然后强制这个 VC 重新加载它的视图。代码是这样的(由通知回调触发):
- (void) reloadView: (NSNotification*) note
{
// Save parameters for reloaded view
UIWindow *window = (UIWindow*) self.view.superview;
//CGAffineTransform xfrm = self.view.transform; // Doesn't do what I want.
// Trash this one & reload the view
[self.view removeFromSuperview];
self.view = nil;
// force view reload
if (self.view == nil)
{
NSLog(@"%s ***** Why didn't self.view reload?!", __PRETTY_FUNCTION__);
}
else
{
// restore params
//self.view.transform = xfrm; // Boo-hoo!
[window addSubview: self.view];
}
}
一切正常,除了应用程序仅是横向的,并且新重新加载的视图作为纵向添加到窗口中。
我尝试将旧视图的变换强制到新视图上,但奇怪的是,它给出了旋转但有一个愚蠢的平移偏移。
有没有办法告诉 UIViewController “做你的旋转,现在”......?
编辑:
我添加了这个相当愚蠢的技巧:
// restore params
self.view.transform = xfrm;
self.view.center = CGPointMake(window.bounds.size.width / 2., window.bounds.size.height / 2.);
[window addSubview: self.view];
这给出了预期的结果,但我对在我的代码库中有这样的东西真的很不满意。当然有更好的方法来做到这一点?!?!
谢谢!
编辑:
在与 JPH 讨论后,答案竟然是“不要那样做”。请参阅评论以了解一些细节和发生的重新设计。