アプリの起動時に Web からデータをロードしたいと考えています。スプラッシュ スクリーンを設定し、didFinishLaunchingWithOptions で sleep(10) を設定しました。今、私はこの時間間隔でアプリが Web サービスを呼び出してデータをロードすることを望んでいますが、これを行うことはできません。私を助けてください、またはそれを行うための提案をしてください。
5 に答える
スリープ中、スレッド(この場合はメインスレッド)は何もできません。
スプラッシュ画面を表示し、データの読み込みを開始し、すべてのデータが読み込まれたらスプラッシュ画面を非表示にすることをお勧めします。
こちらをご覧ください: https://github.com/k06a/LaunchScreenViewController .
アプリの最初のビュー コントローラーが表示される直前に、スプラッシュ ビュー コントローラーを表示します。Web からのデータの読み込みまたは初期化が完了したら、スプラッシュ ビュー コントローラーを閉じます。
特定の時間の後にスリープまたはセレクターを実行することは、適切なアプローチではありません。
大きな質問!
まず第一に、メイン スレッドをスリープ状態にしないでください。そこでは何も機能しないため、時間を無駄にしているだけです。
代わりに、UIScrollView を常に実行している更新ページのようなものをセットアップします。これは、データがフェッチされたときにのみ消えます。
データがフェッチされたときに、AppDelegate の関数を呼び出してローダー ビューを削除し、HOMEPAGE を追加する Web サービスのデリゲートを使用します。
何かのようなもの、
これはほんの一例です...
- (void) webserviceDidFinishLoading //write in appdelegate.m
{
[self.activityIndicatorView removeFromSuperView];
self.window.rootController = self.homeViewController;
}
お役に立てれば!:)
ちょっと仲間、次のコードを参照してください..
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
splashView = [[UIImageView alloc] initWithFrame:iphoneFrame];
splashView.image = [UIImage imageNamed:@"Default"];
[self.window addSubview:splashView];
//// load you web-service here and get data. After 2 sec iphone rootview controller will display
[self performSelector:@selector(loadViewIphone) withObject:nil afterDelay:2.0];
}
}
-(void)loadViewIphone
{
[splashView removeFromSuperview];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setType:kCATransitionFade];
[animation setDuration:0.5];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:
kCAMediaTimingFunctionEaseInEaseOut]];
[[self.window layer] addAnimation:animation forKey:kAnimationKey];
}
これがお役に立てば幸いです...
:)
メイン スレッドをスリープ状態にして、スプラッシュ スクリーンを長時間表示することはお勧めできません。簡単なトリックに従うことで、同じことを達成できます。あなたの場合、スプラッシュ画面を隠した後、最初のView Controllerからサービスが呼び出されていると思います。したがって、スプラッシュ スクリーンのような同じ画像を含むモーダル ビューを作成できます。そして、次のように表示します。
SLSDummySplash *dummySplash = [self.storyboard instantiateViewControllerWithIdentifier:@"splashId"];
[self presentViewController:dummySplash animated:NO completion:nil];
サービスの呼び出し/長時間の読み込みイベントが完了したら、モーダル ビューを閉じます。