0

ボタンをタップすると、関数が呼び出されました

[myBtn addTarget:self action:@selector(myFunction) forControlEvents:UIControlEventTouchUpInside];

私の関数では、複雑なステートメントのコレクションが実行され、実行に少し時間がかかるため、Loading (UIActivityIndi​​catorView) を次のように表示したいと思います。

-(void) addTradeAction {
    //Show Loading
    [SharedAppDelegate showLoading];

    //disable user interaction
    self.view.userInteractionEnabled = NO;

    //execute call webservice in here - may be take 10s
    //Hide Loading
    [ShareAppDelegate hideLoading];
}

myBtn (マイ ボタン) をタップすると、3 秒後または 4 秒後に [ShareAppDelegate showLoading] が呼び出されました。

[ShareAppDelegate showLoading] を他の関数で使用するのは珍しいことです。-> 非常にうまく機能します。つまり、すべてのステートメントが順番に実行されるということです。

欲しいのは、マイボタンをタップするとすぐにロードが呼び出されることです。

事前にお願いします

4

3 に答える 3

1

複雑なステートメントで UI アニメーションや UI 関連のコードが実行されない場合は、その部分を別のスレッド (mainThread 以外) で実行できます。ステートメントが完了したら (または完了ブロックで)、そこで loadingOverlay を削除できます。

于 2013-10-29T15:52:03.627 に答える
0

システムがハングアップする可能性があるため、myFunction をバックグラウンド キューで実行するようにします。

- (void)myFunction {
   dispatch_queue_t myQueue = dispatch_queue_create("myQueue", NULL);

    // execute a task on that queue asynchronously
    dispatch_async(myQueue, ^{
       // Put the current myFunction code here.
    });

}
于 2013-10-29T15:49:32.890 に答える