我正在实现 StoreKit 应用内应用购买界面,虽然看起来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
上遇到了同样的问题,即从该方法返回的视图控制器:
GKLocalPlayer.authenticateHandler = ^(UIViewController *loginVC, NSError *error) {};
重申一下:这两者都在iPhone(但不是iPad)上处于纵向模式,并且它们强制UI进入纵向模式。 返回后,应用的 UI 被搞砸了。
我遇到了类似的问题。我的通用应用程序是横向的,但是虽然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
在显示SKStoreProductViewController
之前,请尝试更改modalPresentationStyle
属性。
我运气很好,将其设置为 UIModalPresentationPageSheet
这似乎很好地覆盖了横向 iPad 外壳。