亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOS開發筆記-基礎UI(7)湯姆貓(UIImageView的序列幀動畫、圖片加載,方法重構、Bundle圖片素材)

2019-11-14 19:29:12
字體:
來源:轉載
供稿:網友

使用UIImageView、UIButton實現一個綜合小案例---湯姆貓

回憶:UIImageView 來自UIView,UIView 來自UIResponder,UIButton 來自UIControl,UIControl 來自UIView

單獨看實現,代碼實現其實比較簡單,但是創意很難得,美工要求很高! 是一個了不起的游戲!

功能分析

(1)點擊對應的按鈕后,讓湯姆貓展現對應的動畫

步驟分析

(1)搭建UI界面,同時也是準備素材
(2)監聽按鈕點擊
(3)根據點擊的按鈕執行對應的動畫

說明:只適配了3.5寸屏幕
 

Images.xcassets中的素材

1>  蘋果極力推薦(images。xcassets 只支持 png 格式)png格式的圖片,因為 png 格式圖片保真,不要用 jpg 圖片,jpg不保真,壓縮比太高,有噪點。

2>  圖片只支持[UIImage imageNamed]的方式實例化,但是不能從Bundle中加載

3>  在編譯時,Images.xcassets中的所有文件會被打包為Assets.car的文件

 

如果一定要使用 jpg 格式圖片,那么要放到 supporting files 文件夾內

 

UIImageView的序列幀動畫

類關系

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIImageView : UIView 

找到一個屬性;動畫圖像(復數,數組)

@PRoperty(nonatomic,copy) NSArray *animationImages;            // The array must contain UIImages. Setting hides the single image. default is nil

還有一個時間間隔

@property(nonatomic) NSTimeInterval animationDuration;         // for one cycle of images. default is number of images * 1/30th of a second (i.e. 30 fps)

double類型,是一組圖片,播放一個周期的時間,默認是每秒30個圖

typedef double NSTimeInterval;

還有一個重復屬性,0代表無線重復,默認是0

@property(nonatomic) NSInteger      animationRepeatCount;      // 0 means infinite (default is 0)

還有三個對象方法

- (void)startAnimating;- (void)stopAnimating;- (BOOL)isAnimating;

注意:不可以并行的進行動畫,比如和水的時候,不能同時被打頭!需要判斷方法,上面提到了isAnimating 方法

代碼如下:

#import "ViewController.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UIImageView *tom;@end@implementation ViewController- (void)tomAnimationOfName:(NSString *) img andCount:(int)count{    //序列幀動畫:讓一組圖片,和放電影一樣,一張張的播放,動起來的效果        //判斷是否動畫中,不可以同步    if ([self.tom isAnimating]) {        //直接結束動畫操作方法,這里就是沒有返回值,nil 不行        return;    }        //開始肯定是存儲圖片,81個,用可變數組    NSMutableArray *arrayImage = [NSMutableArray array];    //遍歷圖片    for (int i = 0; i < count; i++) {        //類似 c,格式控制,不足兩位0補齊        NSString *name = [NSString stringWithFormat:@"%@_%02d.jpg", img, i];        UIImage *image = [UIImage imageNamed:name];        //添加到數組里        [arrayImage addObject:image];    }    //然后開始動畫    //把圖片放到animationImages,接受數組參數    self.tom.animationImages = arrayImage;    //設置時間間隔,81張圖,圖多就播的時間稍微長,否則短    self.tom.animationDuration = arrayImage.count * 0.074;    //設置重復次數    self.tom.animationRepeatCount = 1;    //開始動畫    [self.tom startAnimating];    //結束動畫}- (IBAction)head{    [self tomAnimationOfName:@"knockout" andCount:81];}- (IBAction)drink{    [self tomAnimationOfName:@"drink" andCount:81];}

不過,發現程序運行的時候非洲消耗內存!

 

考慮UIImage imageNamed問題(詳解:UIImage 的imageWithContentsOfFile:path和imageNamed的區別

在圖片使用完成后,不會直接被釋放掉,具體釋放時間由系統決定,這是不好的,不合理的。需要我們手動改變。比如如果同一圖片,一個程序里總是反復使用每次都要重新從磁盤加載,會降低性能。(程序員追求的是平衡,相對性能好,執行時間好。不能搞極端。)這些是模擬器測不出來的,因為使用的是電腦的內存,不會輕易用完。一般來說:imageNmaed  適用于圖片小的,常用的圖像處理。來進行加載。還可以使用[UIImage imageWithContentsOfFile:path]實例化圖像(全路徑)。

因為前者有緩存(圖片所占用的內存會一直停留在程序中)

+ (UIImage *)imageNamed:(NSString *)name;
后者,無緩存(圖片所占用的內存會在一些特定操作后被清除)
+ (UIImage *)imageWithContentsOfFile:(NSString *)path
- (id)initWithContentsOfFile:(NSString *)path;
path是圖片的全路徑
        NSString *name = [NSString stringWithFormat:@"%@_%02d.jpg", img, i];        // UIImage *image = [UIImage imageNamed:name];        //添加到數組里        NSString *file = [[NSBundle mainBundle] pathForResource:name ofType:nil];        UIImage *image = [UIImage imageWithContentsOfFile:file];        [arrayImage addObject:image];

這樣發現,還是沒什么大的改變,那么應該在動畫調用的時候,做手動的把動畫數組的內容清空!這里還要注意,要節哀延遲,否則動畫剛開始,就清空了!注意!

    //結束動畫,應該等等再清空    [self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration];

 

代碼中的方法重構的策略

1> 將具有共性的代碼復制到一個新的方法

2> 根據不同的調用情況,增加方法的參數

提示:在寫程序時不要著急重構,有時候把代碼先寫出來,更容易看清楚如何重構才會更好!當一份代碼重復出現在程序的多處地方,就會造成程序又臭又長,當這份代碼的結構要修改時,每一處出現這份代碼的地方都得修改,導致程序的擴展性很差,因此,要將重復出現的代碼抽取到某個方法中,在需要這份代碼的地方調用方法即可

抽取代碼的思路:將相同的代碼放到一個方法中,將不同的值當做方法參數傳進來
 

Bundle中的圖片素材

往項目中拖拽素材時,通常選擇

1> Destination: 勾選

2> Folders:

選擇第一項:黃色文件夾

Xcode中分文件夾,Bundle中所有素材所在,都在同一個文件夾下,開發效率很高,因此,不能出現文件重名的情況,但是美工不舒服。

       

特點:

可以直接使用[NSBundle mainBundle]作為資源路徑,效率高!

可以使用[UIImage imageNamed:]加載圖像

 

選擇第二項:藍色文件夾

Xcode中分文件夾,Bundle中同樣分文件夾,因此,可以出現文件重名的情況

特點:

需要在[NSBundle mainBundle]的基礎上拼接實際的路徑,效率較差!

不能使用[UIImage imageNamed:]加載圖像

 

文件管理

[NSFileManager defaultManager]

常用方法

1> 判斷文件是否存在

- (BOOL)fileExistsAtPath:(NSString *)path;

2> 將文件從源路徑復制到目標路徑

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;

3> 刪除文件

- (BOOL)removeItemAtPath:(N

 

序列幀動畫開發大概步驟:

// 1. 設置圖片的數組[self.tom setAnimationImages:xxx];// 2. 設置動畫時長,默認每秒播放30張圖片[self.tom setAnimationDuration:xxx];// 3. 設置動畫重復次數,默認為0,無限循環[self.tom setAnimationRepeatCount:xxx];// 4. 開始動畫[self.tom startAnimating];// 5. 動畫播放完成后,清空動畫數組[self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration];

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人看片人aa| 国产日韩欧美黄色| 91综合免费在线| 国内外成人免费激情在线视频| 成人精品一区二区三区电影黑人| 亚洲人精选亚洲人成在线| 亚洲国产另类久久精品| 亚洲欧美国产精品专区久久| 成人春色激情网| 国产精品扒开腿做| 日本精品免费一区二区三区| 日韩大陆欧美高清视频区| 91精品久久久久久久久久久久久| 欧美成人激情图片网| 欧美黄色免费网站| 亚洲欧洲午夜一线一品| 成人观看高清在线观看免费| 亚洲国产精品va| 琪琪亚洲精品午夜在线| 亚洲第一精品自拍| 波霸ol色综合久久| 欧美怡春院一区二区三区| 国内精品久久久久伊人av| 在线色欧美三级视频| 久久成人国产精品| 8x海外华人永久免费日韩内陆视频| 日韩电影大片中文字幕| 成人精品久久一区二区三区| 最近2019中文字幕在线高清| 日韩免费观看av| 精品一区二区三区电影| 久久精品视频在线观看| 亚洲精品中文字幕女同| 亚洲在线免费观看| 2021国产精品视频| 国产精自产拍久久久久久| 久久精品色欧美aⅴ一区二区| 亚洲成色777777女色窝| 欧美性色视频在线| 亚洲日本中文字幕免费在线不卡| 91精品在线国产| 亚洲国产天堂久久综合| 91麻豆桃色免费看| 欧美精品久久久久久久免费观看| 国产视频精品va久久久久久| 色偷偷综合社区| 亚洲欧洲激情在线| 国产视频精品免费播放| 插插插亚洲综合网| 亚洲美女福利视频网站| 欧美视频裸体精品| 亚洲无限乱码一二三四麻| 国产亚洲精品久久久久久牛牛| 亚洲欧美日本精品| 国产精品91久久久久久| 国产精品第3页| 国产成人精品综合| 欧美激情视频在线免费观看 欧美视频免费一| 成人黄色生活片| 国产精品国语对白| 国产成人福利夜色影视| 最好看的2019的中文字幕视频| 国产午夜精品免费一区二区三区| 亚洲欧美日韩视频一区| 国产精品久久久久久婷婷天堂| 久久影视电视剧免费网站清宫辞电视| 欧美日韩第一视频| 欧美壮男野外gaytube| 亚洲第一网中文字幕| 日本久久久久久久久| 亚洲精品国偷自产在线99热| 成人乱色短篇合集| 精品人伦一区二区三区蜜桃网站| 国产精品美乳一区二区免费| 久久天天躁狠狠躁夜夜爽蜜月| 欧美男插女视频| 法国裸体一区二区| 亚洲一区二区三区四区视频| 中文字幕日韩精品在线| 国产精品久久久久久久久久东京| 国产精品美女av| 91亚洲午夜在线| 欧洲一区二区视频| 欧美成人全部免费| 91精品国产91久久久久福利| 中文字幕国产日韩| 久久久伊人欧美| 国产美女精品免费电影| 超薄丝袜一区二区| 国产热re99久久6国产精品| 精品视频www| 国产中文字幕日韩| 2018中文字幕一区二区三区| 日韩在线免费观看视频| 欧美日韩国产激情| 91在线免费网站| 欧美美女15p| 亚洲一区二区久久久久久久| 8090理伦午夜在线电影| 国产精品免费一区二区三区都可以| 国产精品视频男人的天堂| 97在线观看免费高清| 少妇av一区二区三区| 欧美成人午夜免费视在线看片| 亚洲欧美国内爽妇网| 亚洲欧洲日本专区| 日韩中文字幕不卡视频| 国产欧美精品在线播放| 国内精品久久久| 久久亚洲精品一区| 欧美一级视频免费在线观看| 久久久久久久av| 国产成人精品一区| 国产欧美最新羞羞视频在线观看| 一区二区三区高清国产| 亚洲欧洲视频在线| 亚洲日本成人女熟在线观看| 青青草一区二区| 久久国产精品影视| 欧美激情按摩在线| 欧美性生交xxxxxdddd| 日韩精品高清在线观看| 亚洲视频在线观看视频| 日韩av电影院| 国产精品尤物福利片在线观看| 色悠悠国产精品| 热久久免费视频精品| 亚洲高清av在线| 欧美成人免费视频| 亚洲男人av在线| 欧美黄色成人网| 97精品欧美一区二区三区| 亚州精品天堂中文字幕| 91在线观看免费观看| 久久久国产精品x99av| 国产做受高潮69| 久久久久久网址| 精品国产一区二区三区久久狼5月| 国产极品jizzhd欧美| 国产一区视频在线播放| 精品视频在线播放免| 国产精品电影久久久久电影网| 国产视频精品免费播放| 日韩免费在线看| 国产精品久久77777| 日韩中文在线中文网在线观看| 日韩av一区在线| 久久久人成影片一区二区三区| 亚洲区一区二区| 欧美在线中文字幕| 欧美国产高跟鞋裸体秀xxxhd| 欧美专区在线观看| 伊人久久五月天| 欧美激情精品久久久| 国产精品视频永久免费播放| 国产精品女人网站| 亚洲成人中文字幕| 中文字幕不卡av| 青青草原成人在线视频| 成人在线中文字幕| 欧美一级在线播放| 久久久久久久久久久人体| 国产精品成人一区二区三区吃奶| 欧美一区三区三区高中清蜜桃|