У SKStoreProductViewController и GKHostedAuthenticateViewController нет ландшафтных режимов iPhone
Я реализую интерфейс покупки приложения StoreKit in-app, и хотя кажется, что SKStoreProductViewController
обрабатывает ландшафт на iPad, он, похоже, не делает этого для моего приложения на iPhone (он универсален).
Интерфейс SKStoreProductViewController
настолько ограничен, я никак не могу манипулировать VC
. Кто-нибудь еще сталкивается с этим? Любые рабочие обходы?
Когда я запускаю код, который работает на iPad, SKStoreProductViewController
поступает с левой стороны, примерно на дюйм, и висит там до увольнения. Кажется функциональным, но это испортило VC, который выскочил после увольнения.
Здесь код:
// 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
, которая является обработчиком view, возвращаемым из метода:
GKLocalPlayer.authenticateHandler = ^(UIViewController *loginVC, NSError *error) {};
Повторить: оба они находятся в портретном режиме на iPhone (но не в iPads), и они заставляют пользовательский интерфейс перейти в портретный режим. По возвращении пользовательский интерфейс приложения испорчен.
Ответы
Ответ 1
У меня возникла аналогичная проблема. Мое универсальное приложение в ландшафте, но в то время как 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
Ответ 2
Попробуйте изменить свойство modalPresentationStyle
на SKStoreProductViewController
перед его представлением.
Мне повезло, установив его на UIModalPresentationPageSheet
, который, по-видимому, отлично подходит для iPad iPad.