2

私は理解しようとしていますUIView animateWithDuration:completion。私がやろうとしているのは、UIView を別の UIView にドラッグすることです。それらが交差する場合は、ドラッグする UIView のアルファを 0 に設定してから、ドラッグする UIView を元の場所にリセットします。アイデアは、アイテムをバケットにドラッグ アンド ドロップすることです。まず、アルファを 0 に設定してからリセットします。これは、ドラッグ ビューのパン ジェスチャ レコグナイザのコードです。

else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        // Update the description view
        if (CGRectIntersectsRect(panViewPiece.frame, _descriptionView.frame)) {
            [UIView animateWithDuration:0.25 animations:^{
                self.dragDescriptionView.alpha = 0.0;
            }completion:^(BOOL finished) {
                if (finished) {
                    panViewPiece.center = _dragDescriptionViewOriginalCenter;
                    self.dragDescriptionView.alpha = 1.0;
                }
            }];
            [self updateDescriptionView];
        }
}

したがって、完了ブロックが機能する方法は、最初の animateWithDuration が終了したときに完了ブロックが呼び出されると思いました。最初の部分でアルファを 0 に設定しようとしています。それが完了したら、panViewPiece を元の場所に戻し、そのアルファを 1 に設定します。四角形が交差した後、アルファは 0 になります。元の中心に戻ると 1 に戻ります。元の位置にスナップしている間、ビューを表示したくありません。完了ブロックを正しく理解していますか? それとも、これが機能する方法ではありませんか?ありがとう!

4

2 に答える 2

0

何を見ているのかよくわかりません - アルファ 0 へのフェードは問題なく動作しますが、元の位置に戻る前に再び表示されるとおっしゃっていますか? アニメーションで表示されるように戻るか、元の位置にアニメーションで戻るか?

それが表示されただけで、突然正しい位置に戻った場合、私の推測では、アニメーションブロックが終了する前に、他のコード(質問には表示されていません)がアルファを1に設定していると思います-UIViewブロック アニメーションの呼び出しは非同期なので、次のコードはアニメーションの実行前または実行中に実行されますか?

于 2012-11-14T08:11:00.963 に答える
0

完了ブロックでは、dragDescriptionView のアルファを 0.0 にアニメーション化した後、1.0 に戻します。それはあなたが望むものですか?あなたの質問では、panViewPiece に 1.0 のアルファを持たせたいように聞こえますが、それはあなたのコードが行っていることではありません。

于 2012-11-13T04:48:49.333 に答える