Вопрос по uiviewcontroller, ios4, ios – UIViewController не поворачивается в ландшафт

0

Во многих ситуациях необходимо вращать контроллер и не работает. Прямо сейчас у меня есть обратная проблема: она вращается, и я хочу отключить.

В этом ViewController у меня есть это:

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

но он автоматически вращается, потому что спрашивается не этот UIViewController, а его родитель в дереве пользовательского интерфейса. Может быть, это проблема.The root controller must return Yes for all cases, because there are a few other UIViewControllers on the stack, which has / must have Portait / Landscape support.

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

Пожалуйста, не предполагайте, что это не должно быть так и должно быть переписано. Я знаю.

Как бороться с этим контроллером, чтобы заставить Portait?

Пожалуйста, прочитайте жирный текст тоже:can't force the whole app to support only Portait for 1 view controller, there are many on stack!

все контроллеры представления в вашем стеке должны возвращатьсяYES в ответ наshouldAutorotateToInterfaceOrientation: чтобы это работало. nielsbot
Да, прости. см. ответ Эрика nielsbot
они возвращаются ДА. и они вращаются, что хорошо, только последний элемент, который я хочу исправить. user529543
Вы зарегистрировали свой не вращающийся контроллер представления как дочерний элемент корневого контроллера представления, который вращается? если вы ответите «НЕТ» контроллер корневого представления также должен ответить «НЕТ» nielsbot
это нехорошо, кроме того, оно предлагает изменить на уровне приложения, что я действительно не хочу. user529543

Ваш Ответ

2   ответа
2

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

portrait only orientations

Пробовал: впустую потратил время, оно стоит DOWNVOTES.
это смешно, ты видишь, что это не работает и стоит отрицательных голосов, и он все еще получил отрицательные голоса :)
Просто имейте это в своем корневом контроллере представления и каждом другом VC, который вы хотите повернуть: - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {return YES; }
Я сказал, что он должен поддерживать всю ориентацию: & quot; Корневой контроллер должен возвращать Да для всех случаев, потому что в стеке есть несколько других UIViewController, которые имеют / должны иметь поддержку Portait / Landscape. & Quot; И бесполезно говорить мне, чтобы измениться, чтобы поддержать только Portait всего приложения
Я пытался помочь тебе. Ни одно из предложенных решений не будет работать идеально. Это все о пробах и ошибках. Мне жаль, что мое решение "не сработало" для вас, но это может быть полезно для других. По крайней мере, это помогает другим, пытающимся ответить на ваш вопрос, знать, что мой вариант не подходит для вашей конкретной версии проблемы.
1

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{ 

    UIInterfaceOrientation appOrientation = [UIApplication sharedApplication].statusBarOrientation;
    float width = self.view.bounds.size.width;
    float height = self.view.bounds.size.height;
    //NSLog(@"width %3.0f, height: %3.0f", width, height);

    if((fromInterfaceOrientation == UIInterfaceOrientationPortrait || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)){
        // if is rotated from Portait:
        if((appOrientation == UIInterfaceOrientationLandscapeLeft || appOrientation == UIInterfaceOrientationLandscapeRight)){
            // to Landscape:
            CGAffineTransform transform = self.view.transform;
            transform = CGAffineTransformRotate(transform, -(M_PI / 2.0));
            self.view.transform = transform;            

            [self.view setBounds:CGRectMake(0, 0, height, width)];
        }
    }
    else {
        // it is rotated from Landscape:
        if((appOrientation == UIInterfaceOrientationPortrait || appOrientation == UIInterfaceOrientationPortraitUpsideDown)){
            // to Portrait:            
            CGAffineTransform transform = self.view.transform;
            transform = CGAffineTransformRotate(transform, +(M_PI / 2.0));
            self.view.transform = transform;            

            [self.view setBounds:CGRectMake(0, 0, height, width)];
        }
    } 
}

это не лучшая парадигма программирования, но она делает свое дело.

Кто-нибудь напишет подобное, например, чтобы принять его ответ, или, если можете, напишите лучший метод!

Похожие вопросы