我在我的应用程序中使用 SKStoreProductViewController
。它显示正确,但有几秒钟的延迟,这会降低用户体验。
我的代码有问题吗?或者我应该通知用户 VC 正在加载吗?因为现在人们可以相信在按下按钮后什么都没有发生(这会触发以下代码):
-(void)launchApp:(id)sender {
// Recall on main thread if necessary
if (![NSThread isMainThread]) {
[self performSelectorOnMainThread:@selector(launchApp:)
withObject:sender
waitUntilDone:NO];
return;
}
// Initialize Product View Controller
SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];
// Configure View Controller
[storeProductViewController setDelegate:self];
[storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @"*********"}
completionBlock:^(BOOL result, NSError *error) {
if (error) {
NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);
} else {
// Present Store Product View Controller
[self presentViewController:storeProductViewController animated:YES completion:nil];
}
}];
}
最佳答案
延迟是因为您在产品加载成功后呈现 viewController。
您可以将调用 presentViewController:animated:completion:
放在产品加载后调用的 block 之外。在这种情况下, Controller 将显示为空,并在产品加载后填充。
类似的东西:
SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];
// Configure View Controller
[storeProductViewController setDelegate:self];
[storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @364709193}
completionBlock:^(BOOL result, NSError *error) {
if (error) {
NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);
} else {
}
}];
// Present Store Product View Controller
[self presentViewController:storeProductViewController animated:YES completion:nil];
或者您可以创建一个“弹出式” View ,在 Controller 加载其内容时显示一个事件指示器。
或者你使用[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
有几种方法可以解决这个问题。
关于ios - SKStoreProductViewController 出现延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546431/