Подтвердить что ты не робот

Как я могу отобразить один UIView в ландшафте?

Я рассматривал каждый вопрос до сих пор, и никто, кажется, не ответил на этот вопрос.

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

Я хочу, чтобы регулярные анимации возникали, например, выпадающая вкладка, вращение представления и т.д., когда они выбирают этот элемент, и наоборот, когда они выбирают другое представление.

Нет ли встроенного свойства или метода, чтобы сообщить системе, какая ориентация отображает представление как?

Переопределение метода toautorotate... абсолютно ничего не делает, насколько я могу судить.

Тип ответа, который я бы не оценил, это "RTFM", потому что у меня уже есть, и любой, кто разработал для iPhone, до сих пор знает, что очень мало полезного для F-ing R.

4b9b3361

Ответ 1

post на форуме, который может помочь. Короткий ответ: вам нужно вручную повернуть ваш просмотр или контроллер после того, как изображение было нарисовано, в viewWillAppear: method

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

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

Ответ 2

Вот что я делаю для этого:

сначала укажите это в верхней части вашего файла, прямо под вашим #imports:

#define degreesToRadian(x) (M_PI * (x) / 180.0)

то в viewWillAppear: method

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}

если вы хотите, чтобы это было анимировано, вы можете обернуть все это в блок анимации, например:

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
[UIView commitAnimations];

Ответ 3

Переопределите метод Orientation в классе контроллера и заставьте его в Landscape следующим образом:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    // Overriden to allow any orientation.
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

Простой и эффективный!

Ответ 4

shouldAutorotateToInterfaceOrientation работает только в том случае, если все представления в контроллере tabbar или всех контроллерах представления в навигационном контроллере согласуются с поворотом.