Стоп екран на iPad от Rotating Xcode 4

Създавам приложение за iPad в Xcode 4. Предполага се, че приложението винаги се показва в пейзажен изглед. за да постигна това, опитах следното:

  • В екрана Обобщение на целта избирам само пейзаж вляво като поддържана ориентация на устройството.
  • В екрана Target Info / Info.plist задайте Поддържаните ориентации на интерфейса (iPad) на Пейзаж (ляв начален бутон)

Това кара приложението да стартира в пейзажен режим, но ако завъртя устройството, то все още променя ориентацията си. Освен това, когато имам UIViewController, представен с presentationStyle UIPresentationFormSheet, той се завърта в портретна ориентация в момента, в който се покаже.

В някои други теми / форуми беше препоръчано да се създаде категория за UIViewController и да се пренапише

-(UIDeviceOrientation)interfaceOrientation;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

Винаги да завъртате към ориентацията на устройството (LandscapeLeft) или по-специално LandscapeLeft, също и без AutoRotate, освен ако не завъртите към LandscapeLeft.

Когато настроя тези функции по този начин (или например не разреша никакво завъртане), приложението винаги се показва в портретен режим и няма да се завърта, дори и в LandscapeLeft. Единственият начин приложението да стартира в пейзажен режим е, когато разреша завъртане, без значение каква е ориентацията на интерфейса.

Някой знае ли как мога да поправя това?

Категорията, която внедрих:

@implementation UIViewController(Extends)

-(UIDeviceOrientation)interfaceOrientation
{

    return [[UIDevice currentDevice] orientation];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        return YES;
    else
        return NO;
}

@end

Единственото място, където мога да намеря дефинирана портретна ориентация, е оригиналният прозорец на MainWindow.xib, но това не може да бъде променено и всяка нишка/форум казва, че тази конкретна настройка е/не трябва да е проблемът.


person ophychius    schedule 06.09.2011    source източник


Отговори (1)


Доколкото мога да кажа, стъпките, които сте предприели, трябва да предотвратят завъртане на интерфейса.

Винаги можете да опитате да замените извикванията, които извършват ориентацията във всеки контролер на изгледа на вашето приложение. Това поне трябва да ви даде представа къде се случва ротацията. След което точката на прекъсване може да ви каже повече.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
   NSLog( @"will rotate to orientation %d in %@", interfaceOrientation, NSStringFromClass([self class])
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
   NSLog( @"did rotate from orientation %d to %d in %@", fromInterfaceOrientation, [self interfaceOrientation], NSStringFromClass([self class])
}
person Pieter    schedule 06.09.2011
comment
Проблемът, ако не го оставите да се върти, е, че приложението очевидно винаги започва в портретен режим и ако го дефинирате да е в пейзаж, първото нещо, което прави, е да превключи на пейзаж, така че ако му забраните да променя, никога няма да се появи в пейзаж. Промених го така, че shouldAutorotateToInterfaceOrientation да връща ДА и в двата пейзажни режима и това изглежда го коригира. Той все още позволява само един Пейзаж (бутон Начало вляво), защото това е зададено в Info.plist. Вашият отговор наистина ми помогна да разбера вътрешната работа на приложението. - person ophychius; 07.09.2011