Только один вид автоповорота в xcode?

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

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


person davis    schedule 07.11.2011    source источник
comment
Как добавляется B? Если он не является независимым (например, через контроллер навигации), это может быть проблемой.   -  person Stavash    schedule 08.11.2011
comment
@stavash, как бы мне сделать его независимым? Я добавил, добавив подкласс UIViewController   -  person davis    schedule 08.11.2011
comment
@stavash есть ли способ сделать независимое представление без панели вкладок? Могу ли я ссылаться на независимое представление с помощью кнопки?   -  person davis    schedule 08.11.2011


Ответы (2)


Вы можете вручную управлять вращением любого желаемого объекта 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];
    }

}
person Cyprian    schedule 07.11.2011
comment
когда я помещаю это в свой ViewB.m, ничего не происходит. View B - это modalviewcontroller, есть ли что-то дурацкое, что я делаю неправильно? - person davis; 08.11.2011
comment
Чтобы это сработало, вам нужно будет запустить метод поворота после того, как вы поймаете событие поворота. Пожалуйста, проверьте правку в ответе - person Cyprian; 08.11.2011
comment
Хорошо, так что это работает отлично, но проблема в том, что, хотя представление действительно вращается, у меня есть видео, которое воспроизводится внутри веб-представления внутри ViewB, которое мне также нужно повернуть. Есть предложения по выполнению этого? Спасибо - person davis; 08.11.2011

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

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

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

person Mr. Crowley    schedule 14.01.2013