我在我的应用中使用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];
}
}];
}
答案 0 :(得分:33)
延迟是因为您在产品加载后提供了viewController。
您可以将调用presentViewController:animated:completion:
放在已加载产品后调用的块之外。在这种情况下,控制器将显示为空,并在产品装入后填充。
沿着这些方向:
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];
或者您可以创建一个“弹出窗口”视图,在控制器加载其内容时显示活动指示器。
或者您使用[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
有几种方法可以解决这个问题。