0

私はこのコードを持っています

- (IBAction)save:(id)sender {

    self.imageView.image = [UIImage imageNamed:@"loading.gif"];

    [self.view setUserInteractionEnabled:NO];
    MBProgressHUD *hudSave = [MBProgressHUD showHUDAddedTo:self.navigationController.view  animated:YES];
hudSave.labelText = @"Saving...";

    NSLog(@"save");

    UIAlertView *deco;

    if (!isVideo) {
         UIImageWriteToSavedPhotosAlbum (imageView.image, nil, nil , nil);
         deco = [[UIAlertView alloc]initWithTitle:@"Save" message:@"Your photo has been saved." delegate: nil cancelButtonTitle:@"oK" otherButtonTitles:nil];
    }else{

         //UIAlertView *explain;
        //explain = [[UIAlertView alloc]initWithTitle:@"Wait during processing" message:@"Your video is being filtered, this process may be long, depending of both video and device. Please do not close this app until task is finished." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
            UIAlertView *explain;
            explain = [[UIAlertView alloc]initWithTitle:@"Wait during processing" message:@"Your video is being filtered, this process may be long, depending of both video and device. Please do not close this app until task is finished." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
            [explain show];

            [self InitialisationRefiltrage:urlVideo];

          //[self InitialisationRefiltrage:urlVideo];
        deco = [[UIAlertView alloc]initWithTitle:@"Save" message:@"Your video has been saved." delegate: nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
     } 

     [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES];
     [deco show];

    [self.view setUserInteractionEnabled:YES];

}

問題の部分は、私のファイルがビデオの場合、「initialisationRefiltrage」(正常に動作している) に直接行きますが、MBProgressHUD と警告ビューの説明を表示せずに、ビデオの特徴の後にすべてを表示します (説明、デコ、およびMBProgressHUD) を同時に実行します。

ディスパッチ、スレッドなどで何かを試してみます...しかし、正しく行われていないと思うので、その方法についても手がかりを教えてください。

良い1日を。

4

2 に答える 2

1

アラートが表示され、ユーザーがアラートのボタンをタップした場合にのみ実行されるよう[self InitialisationRefiltrage:urlVideo]に、デリゲート メソッドにコードを配置します。UIAlertView

代わりに、完了ブロックを使用するいくつかのサードパーティの UIAlertView サブクラスを使用して、アラートが閉じられたときにのみコードを実行することもできます。たとえば、これを行う私のクラスを参照してください

さらに、コードを読みやすくするために、コーディング規約を尊重し、小文字で始まるメソッド名を使用する必要があります。

于 2012-10-03T09:58:09.787 に答える
1

UI は「実行ループ」で更新されます。

あなたが行っている呼び出しは、iOS にいくつかのビュー (アラート、MUD...) を表示するように指示し、次のループの実行時にそれを行います。

続行する前に、ユーザーがアラートに応答するのを待つ必要があります。これを行うには、自分自身を UIAlert のデリゲートとして設定し、イベントに応答します。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    ...
}

アラート ビューにブロックを渡すことができるライブラリも利用できるため、全体が簡素化されます。(たとえば、https://github.com/jivadevoe/UIAlertView-Blocks )

PSスタックオーバーフローは初めてのようです-質問に答えてよろしければ、私の答えにチェックを入れてください...

于 2012-10-03T09:55:08.713 に答える