en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

5.06.2011

簡單製作 UIImageView 的旋轉與翻轉動畫

 

這裡的旋轉是只影像像右邊或是向左邊旋轉 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 參數時都會以目前狀態為基準,所以會與上一次的執行結果不同。






沒有留言:

張貼留言