2013-04-16 46 views
0

我正在開發一個水族館應用程序。我需要在其中產生魚的動作。魚應該游泳,當到達水族館的一端時應該轉動(或翻轉)並移動到另一端,再次轉動(或翻轉)並且回到其原始位置。CATransform3DGetAffineTransform用於翻轉一個接一個地被調用的視圖不工作

fishforword motion正常工作,它也輪到(翻轉)達到其結束。但是當它到達另一端時,翻轉動畫加上進一步的動畫突然跳過。

以下是我使用的代碼.....

CGFloat originalChildXpos = fishView.frame.origin.y; 

/************************************** Animation 1 **************************************************************/ 

[UIView animateWithDuration:15.0 
         delay:1.0 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{       
        fishView.frame =CGRectMake(0, fishView.frame.origin.y, fishView.frame.size.width, fishView.frame.size.height);       
       }completion:NULL]; 


/*********************************** Animation 2 ****************************************************************/ 
[UIView animateWithDuration:2.4 
         delay:3.0 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        fishView.transform = CATransform3DGetAffineTransform(CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0)); 

       }completion:NULL]; 



/********************************* Animation 3 ****************************************************************/ 
[UIView animateWithDuration:10 
         delay:3.4 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        fishView.frame = CGRectMake(-aquariumView.frame.size.width, fishView.frame.origin.y, fishView.frame.size.width, fishView.frame.size.height); 
       }completion:NULL]; 



/*************************************** Animation 4 *****************************************************/ 
[UIView animateWithDuration:1.4 
         delay:13.4 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        fishView.transform = CATransform3DGetAffineTransform(CATransform3DMakeRotation(-M_PI, 0.0, 1.0, 0.0)); 

       }completion:NULL]; 


/************************************* Animation 5 *******************************************/ 
[UIView animateWithDuration:13.8 
         delay:2.2 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        fishView.frame = CGRectMake(originalChildXpos, fishView.frame.origin.y, fishView.frame.size.width, fishView.frame.size.height); 
       }completion:NULL]; 

我想我在使用CATransform3DGetAffineTransform(CATransform3DMakeRotation())功能,第二次翻蓋旋轉錯過的東西.....

任何人都可以在這裏告訴我出路,並解釋我出錯的地方

我也想知道,而使用CATransform3D旋轉,做座標軸相對於視圖,應用變換改變或受到影響? ?

+0

是'fishView'一個看法?你正在使用它像一個圖層。另外,框架和變換不能一起玩。你不應該像那樣使用它們(文檔中甚至會這樣說) –

+0

是的,fishview是視圖類。 –

+0

但使用CATransform3DMakeRotation的翻轉動畫第一次正常工作,但不是第二次。爲什麼這樣?? –

回答

0
CGFloat originalChildXpos = fishView.frame.origin.y; 
    CGAffineTransform currentTransform=fishView.transform; // step one add this 

    /************************************** Animation 1 **************************************************************/ 

    [UIView animateWithDuration:15.0 
          delay:1.0 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{       
         fishView.frame =CGRectMake(0, fishView.frame.origin.y, fishView.frame.size.width, fishView.frame.size.height);       
        }completion:NULL]; 


    /*********************************** Animation 2 ****************************************************************/ 
    [UIView animateWithDuration:2.4 
          delay:3.0 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         fishView.transform = CATransform3DGetAffineTransform(CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0)); 

        }completion:NULL]; 



    /********************************* Animation 3 ****************************************************************/ 
    [UIView animateWithDuration:10 
          delay:3.4 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         fishView.frame = CGRectMake(-aquariumView.frame.size.width, fishView.frame.origin.y, fishView.frame.size.width, fishView.frame.size.height); 
        }completion:NULL]; 



    /*************************************** Animation 4 *****************************************************/ 
    [UIView animateWithDuration:1.4 
          delay:13.4 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         fishView.transform = currentTransform; // step 2 replace here 

        }completion:NULL]; 


    /************************************* Animation 5 *******************************************/ 
    [UIView animateWithDuration:13.8 
          delay:2.2 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         fishView.frame = CGRectMake(originalChildXpos, fishView.frame.origin.y, fishView.frame.size.width, fishView.frame.size.height); 
        }completion:NULL]; 

用於變ü沒有在最初的X = Y那麼現在你的X成爲Ÿ 並在接下來的語句中,改變Y = Y所以沒有效果...

+0

仍然是相同的結果....魚仍然響應1旋轉/翻轉功能,不爲其他... 可能我有一個很好的教程鏈接這樣的轉換... –

+0

我得到了你...在轉換期間旋轉座標軸得到變換too..but但我需要學習更多關於此...可以請給我一個很好的教程鏈接,可以幫助我進一步...... –

+0

http://www.raywenderlich.com/2454/如何使用uiview動畫教程http://www.raywenderlich.com/5478/uiview-animation-tutorial-practical-recipes http://www.raywenderlich.com/tag/core-animation我跟着這個 – Spynet

相關問題