Только один автоматический поворот просмотра в xcode?

#iphone #xcode #view #autorotate #parentviewcontroller

#iPhone #xcode #Вид #автозапуск #parentviewcontroller

Вопрос:

Итак, в настоящее время у меня есть 3 вида, и мне нужен только один из них для автоматического поворота в любую ориентацию, в то время как остальные остаются в портретном режиме. Прямо сейчас моя настройка — это splashviewcontroller, который переходит в режим просмотра A, а внутри view A — кнопка для переключения на просмотр B. Все, что я хочу, это чтобы view B мог поворачиваться в любую ориентацию.

Когда я возвращаю YES для shouldautorotatetointerfaceorientation в splashviewcontroller, каждое представление вращается, потому что это родительское представление. Когда я возвращаю портрет только в splashview, ничего не вращается, даже если другие виды возвращают YES. Есть ли способ вращать только вид B? Я готов сделать это вручную, если вы можете предоставить код. Спасибо

Комментарии:

1. Как добавляется B? Если он не является независимым (т. Е. Через навигационный контроллер), это может быть проблемой.

2. @stavash итак, как бы мне сделать его независимым? Я добавил, выполнив добавление подкласса UIViewController

3. @stavash есть ли способ создать независимый просмотр без панели вкладок? Могу ли я ссылаться на независимый просмотр с помощью кнопки?

Ответ №1:

Вы можете вручную настроить вращение любого желаемого объекта UIView следующим образом:

Редактировать:

В init или viewDidLoad

 - (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotate) name:UIDeviceOrientationDidChangeNotification object:nil];

    [super viewDidLoad];
}

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

-(void)rotate{

    self.view.bounds = CGRectMake(0, 0, 0, 0);

    if ([UIDevice currentDevice].orientation == UIInterfaceOrientationPortrait){


        CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(0));
        landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);

        self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 320, 480);

        [self.view setTransform:landscapeTransform];


    } else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationPortraitUpsideDown){


        CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(180));
        landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);

        self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 320, 480);

        [self.view setTransform:landscapeTransform];

    } else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeRight){

        CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));

         landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
         self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 480, 320); 


        [self.view setTransform:landscapeTransform];

    }else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeLeft){

        CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(270));

        landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
        self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 480, 320); 

        [self.view setTransform:landscapeTransform];
    }

}
  

Комментарии:

1. ничего не происходит, когда я помещаю это в свой ViewB.m. View B — это modalviewcontroller, есть ли что-то глупое, что я могу делать неправильно?

2. Чтобы заставить его работать, вам нужно будет запустить метод rotate после того, как вы поймаете событие rotation. Пожалуйста, проверьте правку в ответе

3. Хорошо, это работает отлично, но проблема в том, что, хотя вид вращается, у меня есть видео, которое воспроизводится внутри webview внутри ViewB, которое мне также нужно повернуть. Есть предложения по выполнению этого? Спасибо

Ответ №2:

В разделе «Сводные цели» поддерживается ориентация интерфейса, все элементы выбраны, кроме перевернутого, поэтому все, что вам нужно сделать, это перейти к вашему файлу .m, который обрабатывает представление, и использовать этот фрагмент кода.

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
  

Это помогло мне.