4

サードパーティのライブラリを使用してファイルをダウンロードしようとしていますAFNetworking。そのコアにはNSOperation、ダウンロードが完了したときの完了ブロックを設定できるオブジェクトがあります。

どういうわけか、animateWithDuration:このブロック内の が正しく実行されません: 完了ブロックと実際のアニメーションの両方が ~ 5 または 60 秒遅れるか、まったく実行されません。開始したことを知る唯一の方法は、NSLog 呼び出しを使用することです。

私はそれを実証しましょう:

[UIView animateWithDuration:0.1
    animations:^{
        controller.view.alpha=0.5;
        NSLog(@"First Try Start");
    }
    completion:^(BOOL finished) {
        NSLog(@"First Try End");
}];


// Here comes the NSOperation completion block
[self->currentConnection setCompletionBlock:^{
        NSLog(@"downloadComplete!");
        [UIView animateWithDuration:0.1
            animations:^{
                controller.view.alpha=0.5; // this doesn't run immediately, only the NSLog line
                NSLog(@"Second Try Start");
    }
    completion:^(BOOL finished) {
                             NSLog(@"Second Try End");
    }];
}];

コンソール出力:

2013-06-28 23:22:11.374 ML[7831:c07] First Try Start
2013-06-28 23:22:11.477 ML[7831:c07] First Try End
2013-06-28 23:22:11.742 ML[7831:1303] downloadComplete!
2013-06-28 23:22:11.745 ML[7831:1303] Second Try Start
2013-06-28 23:23:05.007 ML[7831:c07] Second Try End

助けていただければ幸いです。

4

2 に答える 2

0

// あなたのクラスで次のメソッドを定義します

-(void)updateView:(UIView *)paramView {
   paramView = 0.5
}

// そして、controller.alpha = 0.5 を設定した場所で次のコード行を呼び出します // 現在はメイン スレッドでアルファを更新しています

[self performSelectorOnMainThread:@selector(updateView:)  withObject:controller.view waitUntilDone:YES];
于 2013-06-28T21:44:34.760 に答える