(メモリ制限の理由で)再利用しているビューコントローラーがあります。したがって、新しい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との話し合いの結果、答えは「そのようにしないでください」であることが判明しました。行われた詳細と再設計の一部については、コメントを参照してください。