iOS開發UI篇—iOS開發中三種簡單的動畫設定
【在ios開發中,動畫是廉價的】
一、首尾式動畫
代碼示例:
// beginAnimations表示此後的代碼要“參與到”動畫中
[UIView beginAnimations:nil context:nil];
//設定動畫時長
[UIView setAnimationDuration:2.0];
self.headImageView.bounds = rect;
// commitAnimations,将beginAnimation之後的所有動畫送出并生成動畫
[UIView commitAnimations];
說明:如果隻是修改控件的屬性,使用首尾式動畫還是比較友善的,但是如果需要在動畫完成後做後續處理,就不是那麼友善了
二、block代碼塊動畫
//簡單的動畫效果
[UIView animateWithDuration:2.0 animations:^{
showlab.alpha=0;
} completion:^(BOOL finished) {
[showlab removeFromSuperview];
}];
說明:
(1)在實際的開發中更常用的時block代碼塊來處理動畫操作。
(2)塊動畫相對來說比較靈活,尤為重要的是能夠将動畫相關的代碼編寫在一起,便于代碼的閱讀和了解.
三、序列幀動畫(以一個簡單的TOM貓動畫示例)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuUmYwgjM4ADNmR2Y1I2N2QGN2ImY5AjYmZWM4IzNyUzMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
導入提前準備好的素材,對UIImageview和button按鈕進行連線。
- (IBAction)eat {
NSMutableArray *arrayM=[NSMutableArray array];
for (int i=0; i<40; i++) {
[arrayM addObject:[UIImage imageNamed:[NSString stringWithFormat:@"eat_%02d.jpg",i]]];
}
//設定動畫數組
[self.tom setAnimationImages:arrayM];
//設定動畫播放次數
[self.tom setAnimationRepeatCount:1];
//設定動畫播放時間
[self.tom setAnimationDuration:40*0.075];
//開始動畫
[self.tom startAnimating];
}
點選按鈕,即可執行動畫,實作效果截圖如下:
四、補充知識
1. Images.xcassets中的素材
(1)隻支援png格式的圖檔
(2) 圖檔隻支援[UIImage imageNamed]的方式執行個體化,但是不能從Bundle中加載
(3) 在編譯時,Images.xcassets中的所有檔案會被打包為Assets.car的檔案
2. UIImageView的序列幀動畫(需要考慮程式性能,釋放資料)
// 0. 是否正在動畫
[self.tom isAnimating];
// 1. 設定圖檔的數組
[self.tom setAnimationImages:arrayM];
// 2. 設定動畫時長,預設每秒播放30張圖檔
[self.tom setAnimationDuration:arrayM.count * 0.075];
// 3. 設定動畫重複次數,預設為0,無限循環
[self.tom setAnimationRepeatCount:1];
// 4. 開始動畫
[self.tom startAnimating];
// 5. 動畫播放完成後,清空動畫數組
[self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration];
3. UIImage imageNamed
(1)在圖檔使用完成後,不會直接被釋放掉,具體釋放時間由系統決定,适用于圖檔小,常用的圖像處理
(2)如果要釋放快速釋放圖檔,可以使用[UIImage imageWithContentsOfFile:path]執行個體化圖像
4. 方法重構的政策
(1) 将具有共性的代碼複制到一個新的方法
(2)根據不同的調用情況,增加方法的參數
提示:在寫程式時不要着急重構,有時候把代碼先寫出來,更容易看清楚如何重構才會更好
5. Bundle(包)中的圖檔素材
往項目中拖拽素材時,通常選擇
(1) Destination: 勾選
(2) Folders:
1)選擇第一項:黃色檔案夾
注意點:Xcode中分檔案夾,Bundle中所有所在都在同一個檔案夾下,是以,不能出現檔案重名的情況
特點:
a.可以直接使用[NSBundle mainBundle]作為資源路徑,效率高!
b.可以使用[UIImage imageNamed:]加載圖像
2)選擇第二項:藍色檔案夾
注意點:Xcode中分檔案夾,Bundle中同樣分檔案夾,是以,可以出現檔案重名的情況
a.需要在[NSBundle mainBundle]的基礎上拼接實際的路徑,效率較差
b.不能使用[UIImage imageNamed:]加載圖