Посмотреть неверно, когда установлено в режим ландшафта

StackOverflow https://stackoverflow.com/questions/2086214

Вопрос

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

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

// 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. Но есть одна проблема. Это представление расположено неправильно, как показано в этот скриншот.

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

Это было полезно?

Решение

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

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

Другие советы

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

[self.view sizeToFit];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top