0

私がやりたいのは、これUIImageViewをアニメーションなしで瞬時に反転させfloatてから、画面上の意図した位置に戻す必要があります。両方とも機能しtransformationsていますが、私が望む方法ではありません。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
resultsEnemy.transform = CGAffineTransformMakeTranslation(0, 0);
[UIView commitAnimations];

resultsEnemy.transform = CGAffineTransformMakeScale(-1, 1);

これは私が使用しているコードです。スケールコード(私がフリップするために使用しているUIImageView)が0.5のアニメーションの一部ではないという事実にもかかわらずduration、それはそれらのルールに従っています。これを回避するにはどうすればよいですか?

4

1 に答える 1

0

このように2つの変換を適用しても、期待した結果は得られません。あなたがする必要があるのは、それらを単一の変換行列に結合することです。以下は期待どおりに機能するはずです。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];

// Create two separate transforms and concatenate them together.
// Use that new transform matrix to accomplish both transforms at once.
CGAffineTransform translate = CGAffineTransformMakeTranslation(0, 0);
CGAffineTransform scale = CGAffineTransformMakeScale(-1, 1);
resultsEnemy.transform = CGAffineTransformConcat(translate, scale);

[UIView commitAnimations];

編集:あなたの説明に基づいて、あなたはこのようなものを望んでいるようです:

CGAffineTransform scale = CGAffineTransformMakeScale(-1, 1);
CGAffineTransform translate = CGAffineTransformMakeTranslation(0, 0);

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
resultsEnemy.transform = scale;
[CATransaction commit];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];

resultsEnemy.transform = CGAffineTransformConcat(translate, scale);

[UIView commitAnimations];
于 2013-02-28T22:02:49.617 に答える