2013-02-28 110 views
0

我想要做的就是立即翻轉這個UIImageView,沒有動畫,然後我需要它到float它的預期位置在屏幕上。 transformations都在工作,但不是我想要的方式。試圖用兩個動畫動畫一個UIImageView動畫,只有一個動畫有持續時間

[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動畫的一部分,但它遵循了這些規則。我如何避免這種情況?

+0

如果你把前變換*動畫塊? – 2013-02-28 21:57:55

+0

當您應用兩個變形時,您只需創建一個(例如使用makeTranslation),然後您必須應用到當前CGAffineTransformRotate(resultsEnemy.transform,...),否則使用第二個變換完全覆蓋第一個變形 – Ultrakorne 2013-02-28 21:59:47

回答

0

像這樣應用兩個轉換不會產生您期望的結果。你需要做的是將它們組合成一個單一的變換矩陣。以下應按預期工作。

[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]; 
+0

但這不是我想要做的,我希望比例尺沒有持續時間,但我希望翻譯持續0.5的持續時間,我不希望他們持續時間爲 – mguniverse 2013-02-28 22:43:41

+0

@mguniverse:請參閱我的編輯。如果這不起作用,請在設置縮放轉換後刪除開始/提交併添加'[CATransaction flush];'。 – 2013-03-07 06:47:11