0

今日の animateWithDuration は本当に愚かな振る舞いをしていて、その理由が本当にわかりません。私はすべてのもの、すべてのブラケット、すべてをチェックしましたが、すべてが完璧でしたが、アニメーションとして指定していないコード行が常に表示されていました.

わかりました、ここがポイントです。私は longPressGestureRecognizer を持っています。longPress が開始された後、ドラッグされている UIImageView にあります。特別なゾーンで終了したら、アニメーションを開始し、UIImageView を別の場所に移動して終了します。これが私のコードです:

if ([(UILongPressGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
    CGPoint dropPoint = CGPointMake(self.center.x, self.center.y-5);
    for (UIView * placeForCharacter in delegate.subviews) {
        if ([placeForCharacter isKindOfClass:[PlaceForCharacterCircle class]]) {
            PlaceForCharacterCircle * newPlaceForCharacter = (PlaceForCharacterCircle *) placeForCharacter;
            if (CGRectContainsPoint(newPlaceForCharacter.dropZone, dropPoint)) {
                    UIViewAnimationOptions options = 0;
                    [UIView animateWithDuration:0.2 delay:0.0 options:0 animations:^{
                        self.frame = CGRectMake(newPlaceForCharacter.frame.origin.x-8, newPlaceForCharacter.frame.origin.y-5, 40, 55);
                        self.alpha = 0.5;
                    } 
                    completion:^(BOOL finished){
                        NSLog(@"animation completed");
                        self.alpha=1;
                        //code referring to the finalizing of moving, doesn't matter here
                        return;
                    }];
            } else {
                if (CGRectContainsPoint(newPlaceForCharacter.dropZone, dropPoint)) {
                    //code referring to the moving to the other place in case the UIImageView was dropped on another zone that is full already, doesn't matter here
                    return;
                }
            }
        }
    }
        //code referring to the comeback of a UIImageView in case it was dropped somewhere else, doesn't matter here
        //These two are the lines that get executed when the animation starts
        //THEY BEGIN
        translatedPoint = CGPointMake(initialX, initialY);
        [[sender view] setCenter:translatedPoint];
        //THEY END
        return;
}

奇妙な理由で、上記の 2 行のコードが、指定された REAL アニメーションではなくアニメーション化されます。これらのコード行にコメントを追加して再確認しました。この場合、アニメーションは問題なく動作します。

誰かが私のためにこれをクリアしてくれませんか?なぜこれが起こるのですか? 実に奇妙な行動のようです。

4

1 に答える 1

1

return;完了ブロック (何もしていない場所) からアニメーションのセットアップ後に移動すると、動作するはずです。

[UIView animateWithDuration:0.2 delay:0.0 options:0 animations:^{
    self.frame = CGRectMake(newPlaceForCharacter.frame.origin.x-8, newPlaceForCharacter.frame.origin.y-5, 40, 55);
    self.alpha = 0.5;
}
completion:^{
    NSLog(@"animation completed");
    self.alpha=1;
    //code referring to the finalizing of moving, doesn't matter here
}];
return;
于 2012-07-16T00:31:46.337 に答える