Вид неправильно расположен при установке в ландшафтный режим - PullRequest
0 голосов
/ 18 января 2010

Приложение «Мой iPhone» основано на навигации и содержит множество только портретных видов и один альбомный вид для просмотра изображений.Поэтому я бы хотел, чтобы этот пейзажный вид автоматически поворачивался на пейзаж, даже если устройство находится в портретном режиме.

Итак, вот что я сделал в контроллере этого вида:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
}

- (void)viewWillAppear:(BOOL)animated
{
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
 [self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

 _originalTransform = [[appDelegate navigationController].view transform];
 _originalBounds = [[appDelegate navigationController].view bounds];
 _originalCenter = [[appDelegate navigationController].view center];

 CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));
 landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0);

 [[appDelegate navigationController].view setTransform:landscapeTransform];

 [appDelegate navigationController].view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
 [appDelegate navigationController].view.bounds  = CGRectMake(0.0, 0.0, 480.0, 320.0);
 [appDelegate navigationController].view.center  = CGPointMake (240.0, 160.0);

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;
 }
}

- (void)viewWillDisappear:(BOOL)animated
{ 
 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
 [self.navigationController.navigationBar setBarStyle:UIBarStyleDefault];

 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
 [[appDelegate navigationController].view setTransform:_originalTransform];
 [[appDelegate navigationController].view setBounds:_originalBounds];
 [[appDelegate navigationController].view setCenter:_originalCenter];

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait; 
}

Теперь у меня этот вид всегда отображается в режиме Lanscape.Но есть одна проблема.Это представление расположено неправильно, как показано на этом снимке экрана .

Я пытался вручную установить кадр после поворота, но это не помогло.Кроме того, я не нашел полное руководство, как установить один вид только для ландшафта. Пожалуйста, помогите мне с этой проблемой.

Ответы [ 2 ]

0 голосов
/ 18 января 2010

Попробуйте использовать этот метод после применения преобразования:

[self.view sizeToFit];
0 голосов
/ 18 января 2010

Проверьте пост этого парня . В основном вам нужно преобразовать вокруг центра окна. Похоже, вам также может понадобиться повернуть строку состояния.

Другой метод - использовать UIDevice setDeviceOrientation, но это частный API и, следовательно, не лучшее решение.

...