私の iPhone アプリケーションにはボタンがあり、ボタンをクリックすると Web サービスが呼び出され、いくつかのリンクが取得されます。その後、それらのリンク内のファイルをダウンロードする必要があります。ボタンをクリックするとポップアップ ビューが表示され、[OK] をクリックすると、ボタンが進行状況バーに変わり、ダウンロードの進行状況が表示されます。ダウンロードが完了すると、進行状況バーは再びボタンに置き換えられます。ここで私が抱えている問題は、インターネット接続が遅い場合、UI がブロックされ、サーバーから詳細を完全に取得するまで [OK] ボタンが押されたままになり、その後に進行状況バーが表示されることです。OKボタンをクリックした直後にプログレスバーを表示したいのですが、UIをロックしてはいけません。次の方法を使用しました。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
[self download];
});
この場合、UI はロックされませんでしたが、プログレス バーは表示されませんでした。そして、私は使用しました
[self performSelectorInBackground:@selector(download) withObject:nil];
この場合、UI はブロックされませんでしたが、サーバーから詳細を取得するまでダウンロード ボタンが表示されています。そのときだけ、進行状況バーが表示されます。
ダウンロードのコード フローは次のとおりです。
- (void)download{
//Creating a custom progressview
myprogressView = [[CustomProgressView alloc]initWithFrame:CGRectMake(25, 138, 100, 28)];
[cell.contentView addSubview:myprogressView];
[cell bringSubviewToFront:myprogressView];
//Calling the methods for getting the details from the server
//after some internal process, start download
[self.myQueue go];
}
あなたのアイデアを共有してください