Я работаю над приложением, которое работает полностью в ландшафтном режиме (UIStatusBarHidden = YES и UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight). Я использую NavigationController, с моей настройкой rootViewController (MainViewController), например:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
В моем MainViewController я загружаю представление так:
- (void)loadView {
CGRect frame = [[UIScreen mainScreen] applicationFrame]; // This returns a portrait frame
MainView *view = [[MainView alloc] initWithFrame:frame];
self.view = view;
[view release];
}
Затем в MainView я загружаю такие подпредставления, как это:
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
self.pdfView = [[PDFView alloc] initWithFrame:frame];
[self addSubview:pdfView];
}
returnself;
}
Моя проблема заключается в том, что MainView правильно отображает в альбомном режиме (несмотря на то, что кадр, переданный в [MainView initWithFrame:] в портретном режиме), в то время как дочерний PDFView отображает в портретную рамку. Я также экспериментировал с применением преобразований в моих реализациях [UIView initWithFrame:] следующим образом:
view.center = CGPointMake(view.frame.size.height/2.0, view.frame.size.width/2.0);
view.transform = CGAffineTransformRotate(view.transform, (M_PI/2.0));
Но, похоже, это не работает, поскольку значение фрейма неверно. Игнорирование фрейма и его создание вручную, похоже, работает в некоторых случаях:
CGRectMake(0.0, 0.0, 480.0, 320.0)
Но очевидно, что выполнять ручные настройки, как это не идеально.
Есть идеи?