1

我嘗試使用幾個CGAffineTransformsCGAffineTransformConcats將動畫串起來。我試圖實現的總體目標是讓圖像旋轉45度,同時向上移動50像素,然後再向下旋轉45度。使用CGAffineTransform的奇怪結果

CGAffineTransform translateUp = CGAffineTransformMakeTranslation(0, -50); 
    CGAffineTransform firstSpin = CGAffineTransformMakeRotation(M_PI_4); 
    CGAffineTransform translateDown = CGAffineTransformMakeTranslation(0, 50); 
    CGAffineTransform secondSpin = CGAffineTransformMakeRotation(M_PI_4); 
    CGAffineTransform transform1 = CGAffineTransformConcat(translateUp, firstSpin); 
    CGAffineTransform transform2 = CGAffineTransformConcat(translateDown, secondSpin); 
    CGAffineTransform transformFull = CGAffineTransformConcat(transform1, transform2);  
    [UIView beginAnimations:@"MoveAndRotate" context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:0.5]; 
    mainCharacterImage.transform = transformFull; 
    [UIView commitAnimations]; 

現在介意你我對所有CG相關的東西都很新,但我不明白爲什麼這樣不起作用。

但是,我不認爲這是不是奇怪的部分,我的問題主要是,任何人都可以向我解釋爲什麼上面的代碼導致我的圖像不僅向上移動和旋轉,但要向右移動大約100個像素?

任何建議非常感謝!

回答

5

因爲transformFull是((translateUp * firstSpin)*(translateDown * secondSpin))的矩陣乘法的結果。動畫直接進入從起點到計算這個矩陣乘法,這恰好是結果:

0, 1, 0 
-1, 0, 0 
50 - 25 * sqrt(2), 25 * sqrt(2), 1 

這個變換矩陣剛好移動大約100個像素的權利的項目。

轉換矩陣沒有歷史記錄。它無法分辨哪些步驟能夠達到這個價值並通過這些步驟。相反,你必須刻意轉移到每一步。試着分兩步做這個動畫。將mainCharacterImage移動到transform1。然後移動到一個新的轉換,它只是π/ 2的旋轉。