SKStoreProductViewController и GKHostedAuthenticateViewController не имеют ландшафтных режимов iPhone.

Я реализую интерфейс покупки приложений в приложении StoreKit, и хотя кажется, что SKStoreProductViewController обрабатывает альбомную ориентацию на iPad, похоже, это не работает для моего приложения на iPhone (оно универсально).

Интерфейс SKStoreProductViewController настолько ограничен, что я не могу каким-либо образом манипулировать VC. Кто-нибудь еще сталкивался с этим? Есть обходные пути?

Когда я запускаю код, который работает на iPad, SKStoreProductViewController появляется с левой стороны, примерно на дюйм, и висит там, пока не исчезнет. Это кажется функциональным, но это портит ВК, которая выскочила при увольнении.

Вот код:

// Set up the store vc (creating it if not already done)
if (self.storeVC == nil) self.storeVC = [[SKStoreProductViewController alloc] init];
self.storeVC.delegate = self;
NSDictionary *params = [NSDictionary dictionaryWithObject:appID forKey:SKStoreProductParameterITunesItemIdentifier]; 

// Set up a HUD in case connecting to the store takes a while
[MBProgressHUD showHUDAddedTo:self.view animated:YES]; 

[self.storeVC loadProductWithParameters:params
                        completionBlock:^(BOOL result, NSError *error) {
       [MBProgressHUD hideHUDForView:self.view animated:YES];
       if (result) {
           [self presentViewController:self.storeVC animated:NO completion:^{
           }];
       }
  }];

Более того, у нас та же проблема с GKHostedAuthenticateViewController, который является контроллером представления, возвращаемым из метода:

GKLocalPlayer.authenticateHandler = ^(UIViewController *loginVC, NSError *error) {};

Повторим: оба они находятся в портретном режиме на iPhone (но не на iPad), и они заставляют пользовательский интерфейс переходить в портретный режим. По возвращении пользовательский интерфейс вашего приложения испорчен.


person Gabriel Adauto    schedule 13.10.2012    source источник
comment
Я только что столкнулся с подобной проблемой сейчас. Я делаю приложение для iPhone только в ландшафтном режиме. Запуск SKStoreProductViewController для просмотра другого приложения iOS в магазине — SKStoreProductViewController выглядит не очень хорошо — есть три вкладки, которые выбирают содержимое представленного ниже прокрутки. Scrollview не использует полную ширину ландшафта, что делает его похожим на... half-assed, я не думаю, что для этого есть другое слово.   -  person Jonny    schedule 10.12.2012
comment
@Jonny, и более того, в последней версии iOS 7 skstoreproductviewcontroller фактически аварийно завершает работу в ландшафтном режиме.   -  person OMGPOP    schedule 10.07.2013


Ответы (2)


Я столкнулся с похожей проблемой. Мое универсальное приложение находится в альбомной ориентации, но хотя SKStoreProductViewController довольно хорошо работает в горизонтальной ориентации на iPad, на iPhone возникают визуальные сбои.

Мое решение состояло в том, чтобы заставить iPhone отображать SKStoreProductViewController в портретной ориентации. Немного грустно, что оно не имеет той же ориентации, что и остальная часть приложения, но это лучше, чем отрезать половину экрана.

Я достиг этого, используя пользовательский подкласс ниже:

@interface SKPortraitStoreProductViewController : SKStoreProductViewController
@end

@implementation SKPortraitStoreProductViewController
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
        return UIInterfaceOrientationPortrait;
    else
        return [super preferredInterfaceOrientationForPresentation];
}
@end
person Edward Marks    schedule 30.05.2013
comment
Но приложение вылетает на iphone iOS 7. Я все еще ищу решение. - person Emmy; 02.11.2013
comment
Я тоже. Кому-нибудь удалось использовать SKStoreProductViewController на iOS 7 в горизонтальном приложении? - person Mayoneez; 24.03.2014

Попробуйте изменить свойство modalPresentationStyle на своем SKStoreProductViewController перед его представлением.

Мне повезло, установив его на UIModalPresentationPageSheet, который, кажется, довольно хорошо покрывает горизонтальный корпус iPad.

person megastep    schedule 10.12.2014