UIViewController не вращается автоматически - PullRequest
7 голосов
/ 10 марта 2010

Как следует из названия. Мой UIViewController не будет вращаться ни на что. При загрузке должен вызываться методAutorotateToInterfaceOrientation, но после этого этого не происходит.

ОБНОВЛЕНИЕ 1:

Это действительно очень странная проблема. По крайней мере для меня. И я постараюсь все объяснить.

Это приложение на основе навигации. Каждый контроллер имеет

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return YES; 
}

Xcontroller является дочерним элементом Acontroller и не вращается автоматически. Если Xcontroller станет дочерним по отношению к Bcontroller, он будет автоматически создан. Так что с Acontroller что-то не так. Но Acontroller идентичен (кроме своих данных) Bcontroller.

Что не так?

ОБНОВЛЕНИЕ 2:

Я решил воссоздать Acontroller. И это сработало. Я думаю, что упустил что-то глупое.

Ответы [ 9 ]

15 голосов
/ 21 июня 2010

Я не уверен, является ли это той же самой причиной, что и ваше дело. Но я испытал то же самое. shouldAutorotateToInterfaceOrientation был вызван только один раз в начале. После серьезной отладки, разбирая код, я обнаружил, что причина в моем переопределенном методе init. У меня было это раньше:

- (id)initWithAlbum:(PhotoAlbum *)theAlbum {
    if (self) {     
        self.photoAlbum = theAlbum;     
    }
    return self;
}

А потом я перешел на этот

- (id)initWithAlbum:(PhotoAlbum *)theAlbum {
    if (self = [super init]) {      
        self.photoAlbum = theAlbum;     
    }
    return self;
}

Примечание: единственное отличие - я добавил [super init] для вызова родительского init. После этого изменения вращение работает хорошо, и каждый раз при повороте экрана вызывается shouldAutorotateToInterfaceOrientation. Надеюсь, что это поможет.

8 голосов
/ 16 октября 2010

Может быть несколько возможных причин, по которым ваш контроллер вида не вращается.

См. Официальные вопросы и ответы Apple по этому вопросу:

Почему мой UIViewController не вращается с устройством?1011 *

5 голосов
/ 11 января 2012

В Apple Q & A есть подробное решение проблемы.

Почему мой UIViewController не вращается вместе с устройством?

http://developer.apple.com/library/ios/#qa/qa1688/_index.html

Если вы добавили viewcontroller.view в uiwindow, вы должны установить этот viewcontroller как rootviewcontroller.

[self.window addSubview: mainViewcontroller.view];
self.window.rootViewController=mainViewcontroller;
3 голосов
/ 08 января 2011

У меня была та же проблема - причина была в том, что это был мой первый UIViewController, который я создал на лету в моем ApplicationDelegate, добавил его View в мое UIWindow и сразу же выпустил его.

Это, конечно, не правильно, так как я только что добавил UIView UIViewController (сохранил его) и затем выпустил весь контроллер.

Вместо этого вы должны добавить свой первый UIViewController в качестве переменной экземпляра в Your ApplicationDelegate и освободить его в методеloc вашего ApplicationDelegate.

3 голосов
/ 08 декабря 2010

Также убедитесь, что у вас нет блокировки поворота. Я провел хороший час, пытаясь понять, почему мои взгляды перестали вращаться. shouldAutorotateToInterfaceOrientation вызывался только один раз при запуске и когда были представлены списки лидеров / достижения Game Center.

1 голос
/ 27 июля 2012

В моем случае ViewController был внутри NavigationController, который использовался «родительским» viewControlled, который получил изменения ориентации.

То, что я сделал в этом родителе, было:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{

    if(_navigationController){
        return  [_navigationController.topViewController shouldAutorotateToInterfaceOrientation: toInterfaceOrientation];
    }

    return toInterfaceOrientation == UIInterfaceOrientationPortrait;
}

Таким образом, вы можете реализовать свою собственную логику изменения ориентации в зависимости от видимого в данный момент контроллера.

0 голосов
/ 17 июня 2012

У меня та же проблема, но с двумя контроллерами представления, добавленными в UIWindow приложения. Причина is Свойство UIView контроллера представления встроено в UIWindow, но вместе с дополнительным контроллером представления

От Apple Технические вопросы и ответы

http://developer.apple.com/library/ios/#qa/qa1688/_index.html

0 голосов
/ 10 марта 2010

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

Этот метод просто спрашивает, должно ли устройство вращаться в направлении или нет. Если вы хотите обработать изменение ориентации, вы должны зарегистрироваться для получения уведомления от UIDeviceDidChangeOrientationNotification и переопределить следующий метод:

- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
    !isShowingLandscapeView)
    {
        [self presentModalViewController:self.landscapeViewController
                            animated:YES];
        isShowingLandscapeView = YES;
    }
    else if (deviceOrientation == UIDeviceOrientationPortrait &&
             isShowingLandscapeView)
    {
        [self dismissModalViewControllerAnimated:YES];
        isShowingLandscapeView = NO;
    }
}

Подробнее здесь .

0 голосов
/ 10 марта 2010
  • (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {return YES; } Вышеупомянутый метод, если вы используете, вы можете вызвать много раз, если вы хотите, без каких-либо ошибок.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...