UIInterfaceOrientation всегда возвращает портрет в AppDelegate iPad?

Я хочу показать заставку в приложении для iPad. Перед этим я хочу получить текущую ориентацию устройства в альбомном или портретном режиме. Я использовал,

    UIInterfaceOrientation orientation= [[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIInterfaceOrientationLandscapeRight || orientation == UIInterfaceOrientationLandscapeLeft)  
    {       
        splachview=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
        splachview.image=[UIImage imageNamed:@"Default-Landscape.png"];

        splachview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        splachview.contentMode = UIViewContentModeTop;

        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
        [self.window addSubview:splachview];
    }
    else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) 
    {
        splachview=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
        splachview.image=[UIImage imageNamed:@"Default-Portrait.png"];

        splachview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        splachview.contentMode = UIViewContentModeTop;

        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
        [self.window addSubview:splachview];
    }

в Appdelegate.m . Ориентация UIInterface всегда определяется только в портретном режиме. Я запустил приложение в ландшафтном режиме, но элемент управления всегда обнаруживал только портретный режим. Как я могу получить текущую ориентацию в AppDelegate.m? Пожалуйста, помогите мне найти решение. Заранее спасибо.


person Gopinath    schedule 11.01.2012    source источник


Ответы (2)


Вы не должны делать это на AppDelegate, а лучше на UIViewController. В UIViewController вы можете правильно узнать, в каком положении находится устройство, по используя соответствующие методы (раздел Настройка параметров поворота просмотра), которые дает вам класс.

person Rui Peres    schedule 11.01.2012
comment
Мистер Джек Бой, спасибо за ваш ответ. До этого кода я сохранял код заставки только в UIViewController. Кстати, когда я поворачиваю приложение, заставка не меняет свою ориентацию. Вот почему я написал код в AppDelegate. А также в AppDelegate я написал код для получения LogInToken. Мне нужно показывать заставку, пока я не получу loginToken. Не могли бы вы мне помочь? Спасибо. - person Gopinath; 11.01.2012
comment
Хорошо, вы разрешаете экрану вращаться? на: - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation - person Rui Peres; 11.01.2012
comment
Г-н Джек Бой, я уверен, что решу свою проблему после вашего ответа. Я следую - (BOOL) должен использовать метод AutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOr‌​ientation в UIViewController. Еще одна проблема заключается в том, что Am вызывает [viewcontrollerobj showSplash]; метод в AppDelegate для отображения экрана-заставки. Затем я продолжаю XMLParser в AppDelegate. В didEndParsing Delegate я попытался скрыть заставку, используя [viewcontrollerobj hideSplash]; но когда элемент управления достигает этого метода, приложение выходит из строя. Как я могу это решить? Надеюсь, вы понимаете мой вопрос. Спасибо. - person Gopinath; 11.01.2012
comment
Хм, можешь показать мне ошибку? Кроме того, вам следует избегать выполнения таких операций в AppDelegate. Вы можете выполнить синтаксический анализ класса, специально разработанного для этого, и использовать свой UIViewController для получения ответа после завершения синтаксического анализа. - person Rui Peres; 11.01.2012
comment
Теперь я решил проблему сбоя приложения. Все еще пытаюсь показать заставку в Default-Landscape.png в портретном режиме. Когда я запускаю приложение в ландшафтном режиме, заставка только в портретном режиме. Пожалуйста помогите. Я последовал за твоей мыслью. Я удалил код из AppDelegate и написал код SplashScreen в UIViewController. Спасибо. Мне нужна твоя помощь. - person Gopinath; 11.01.2012
comment
Можете ли вы сказать мне, может ли приложение вращаться каким-либо образом? - person Rui Peres; 11.01.2012
comment
Приложение Ya iPad должно вращаться как в альбомной, так и в портретной ориентации. Экран-заставка не поддерживает только изменение ориентации. За исключением того, что все приложение работает нормально и очень хорошо меняет ориентацию. Я указал размер кадра splashView(UIImageView) в -(BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOr‌​ientation: тем не менее ориентация не меняется сама по себе. Спасибо. - person Gopinath; 11.01.2012
comment
Вы не должны этого делать там... Этот метод используется, чтобы сказать, разрешаете ли вы поворачивать экран для данного UIInterfaceOrientation... Вы должны делать повороты здесь: -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:( NSTimeInterval) продолжительность - person Rui Peres; 11.01.2012
comment
давайте продолжим это обсуждение в чате - person Gopinath; 11.01.2012
comment
Я попробовал вашу мысль. Но, все еще проблема происходит. Не могли бы вы помочь мне каким-либо другим способом? Спасибо и с нетерпением жду вашей помощи. Я старался изо всех сил и потратил на это весь день. Спасибо. - person Gopinath; 11.01.2012
comment
Не могли бы вы прислать мне свой почтовый идентификатор или что-то еще, чтобы получить мой образец проекта? Спасибо. - person Gopinath; 11.01.2012
comment
Я отправил код на ваш почтовый идентификатор. Пожалуйста, проверьте код и сообщите мне об исправлении. Большое спасибо. - person Gopinath; 11.01.2012

После прочтения вашего кода кажется, что вы хотите показать статическое изображение при запуске приложения. Есть способ сделать это без кода.

http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html#//apple_ref/doc/uid/TP40007072-CH6-SW12

Если вы хотите отображать любой динамический контент как «всплеск», вам может потребоваться обработать его в UIViewController.

Чтобы получить текущую ориентацию устройства, вы можете прочитать свойство: [UIDevice currentDevice].orientation. Просто для справки.

person Hail Zhang    schedule 11.01.2012
comment
Г-н Хайль Чжан спасибо за ваш ответ. До этого кода я сохранял код заставки только в UIViewController. Кстати, когда я поворачиваю приложение, заставка не меняет свою ориентацию. Вот почему я написал код в AppDelegate. А также в AppDelegate я написал код для получения LogInToken. Мне нужно показывать заставку, пока я не получу loginToken. Не могли бы вы мне помочь? Спасибо. - person Gopinath; 11.01.2012
comment
Извините, это может произойти слишком поздно :-) Насколько я знаю, есть одна проблема, вероятно, заключается в том, что rootViewController.view не будет вращаться. Это означает, что вам нужно создать представление контейнера в полном размере, как rootViewController.view, и сделать так, чтобы он автоматически поворачивался как полная ширина и полная высота, тогда вы сможете автоматически поворачивать при изменении ориентации вашего устройства. - person Hail Zhang; 08.09.2013