2

ユーザーイベントに応じて「長い」アクションを実行する正しい方法は何かをさまよっています。たとえば、このスライドは、0.5 秒以上画面外でアニメーション化するブロックをキャンセルするために使用します。[self coreDataAction]自体に0.3秒程度かかる場合があります。

ユーザーがアニメーションの最後を確認したらアクションが完了するようにしたい (ユーザーが誤って別のコントローラーに移動したり、アクションが完了したと思ってアプリを閉じたりしないようにしたい)。

この場合はどこに入れればいい[self coreDataAction];ですか?ブロックの上、ブロック内、または完了ブロック内?

//should I put it here?

 CGPoint slideToCancelCenter = slideToCancel.view.center;
    [UIView animateWithDuration:0.5 animations:^{
        self.goToSleepButton.center = slideToCancelCenter;
        [UIView setAnimationDuration:0.5];
        CGPoint sliderCenter = slideToCancel.view.center;
        sliderCenter.y += slideToCancel.view.bounds.size.height;
        slideToCancel.view.center = sliderCenter;

//should I put it here?        
// [self coreDataAction];
    } completion:^(BOOL finished) {
//should I put it here?
    } ];
4

2 に答える 2

2

これを処理するためのより良い方法は、画面上のビューをアニメーション化してからcoreDataAction、完了ハンドラーで開始することです。メソッドの実行が完了したらcoreDataAction、メソッドを呼び出してスライドをアニメーション化し、画面外の表示をキャンセルできます。

于 2012-10-18T18:27:03.613 に答える
1

Assuming [self coreDataAction] executes on the main thread, I would say you should put it on the first line to ensure that the method is complete by the time the animation is done.

于 2012-10-18T18:14:12.303 に答える