![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghTz19FSXQYU_ZWHzplDg9FRA5ke6qsnvTu0GuOdWGaTA3F56IeNnSo32QPZKWCQ71uu8H_gAdrqSeeW0d1US4WeOlzbjQXyB5g32nVXIGW4FCiCZ7aqeHPBcy0YpKpC7PdEat8_g1nXVN/s320/IMG_0699.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3TsB1AxGRM13Qt7FvxvB7XAXEWiCkIfUGuYgQYU41mmRlSYxHRZckVFyBZK4DwR0w-U4oIXw3wHaO-iIAxDw9EkmIKi2OMqPNPKsK8cWjrxpEVY8m_qumcNgITmry0GnGGRCLdRO2yPoS/s320/IMG_0702.png)
這裡的旋轉是只影像像右邊或是向左邊旋轉 180 度,如左圖;而翻轉則是影像會往畫面後方逐漸縮小,翻轉一圈之後在逐漸放大,呈現鏡像之後的畫面,如右圖。由於在動畫製作的過程鏡射與旋轉都可以使用同一方法(設定 Scale)來達成,因此在動畫的製作上也只有參數上的差異,下面將演示兩個不同事件程式碼。
//旋轉
- (IBAction)onRotation:(id)sender {
//動畫的參數設定
[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self];
//設定動畫開始時的圖片狀態(當前狀態)
[UIView setAnimationBeginsFromCurrentState:YES];
//設定動畫結束時的圖片狀態(透明度與縮放比例)
logoImageView.transform = CGAffineTransformScale(logoImageView.transform , -1.0, -1.0);
//產生動畫
[UIView commitAnimations];
}
//翻轉
- (IBAction)onUpsideDown:(id)sender {
//動畫的參數設定
[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self];
//設定動畫開始時的圖片狀態(當前狀態)
[UIView setAnimationBeginsFromCurrentState:YES];
//設定動畫結束時的圖片狀態(透明度與縮放比例)
logoImageView.transform = CGAffineTransformScale(logoImageView.transform , -1.0, 1.0);
//產生動畫
[UIView commitAnimations];
}
關於上述程式碼注意設定 Scale 的部份有兩種方式可以設定。
CGAffineTransformMakeScale
CGAffineTransformScale
如果使用第一種方式設定,那麼按鈕只會在第一次觸發時生效,因為設定的 Scale 參數會和先前一次的執行結果相同,動畫就無法被產生,反之若採用第二種方式(就是本範例的設定方式),每次在設定 Scale 參數時都會以目前狀態為基準,所以會與上一次的執行結果不同。
沒有留言:
張貼留言