基礎(chǔ) (八) : 幀動(dòng)畫(huà)/plist

掌握

UIImageView幀動(dòng)畫(huà)的使用

UIImage的2種加載方式

重復(fù)代碼的封裝抽取

文檔注釋的寫(xiě)法

UIImageView幀動(dòng)畫(huà)相關(guān)屬性和方法

@property(nonatomic,copy) NSArray *animationImages;

需要播放的序列幀圖片數(shù)組(里面都是UIImage對(duì)象,會(huì)按順序顯示里面的圖片)

@property(nonatomic) NSTimeInterval animationDuration;

幀動(dòng)畫(huà)的持續(xù)時(shí)間

@property(nonatomic) NSInteger animationRepeatCount;

幀動(dòng)畫(huà)的執(zhí)行次數(shù)(默認(rèn)是無(wú)限循環(huán))

  • (void)startAnimating;

開(kāi)始執(zhí)行幀動(dòng)畫(huà)

-(void)stopAnimating;

停止執(zhí)行幀動(dòng)畫(huà)

-(BOOL)isAnimating;

是否正在執(zhí)行幀動(dòng)畫(huà)

UIImage的2種加載方式

方式一:有緩存(圖片所占用的內(nèi)存會(huì)一直停留在程序中)

+(UIImage *)imageNamed:(NSString *)name;

name是圖片的文件名

方式二:無(wú)緩存(圖片所占用的內(nèi)存會(huì)在一些特定操作后被清除)

+(UIImage *)imageWithContentsOfFile:(NSString *)path

-(id)initWithContentsOfFile:(NSString *)path;

path是圖片的全路徑

重復(fù)代碼的封裝抽取

當(dāng)一份代碼重復(fù)出現(xiàn)在程序的多處地方,就會(huì)造成程序又臭又長(zhǎng),當(dāng)這份代碼的結(jié)構(gòu)要修改時(shí),每一處出現(xiàn)這份代碼的地方都得修改,導(dǎo)致程序的擴(kuò)展性很差
因此,要將重復(fù)出現(xiàn)的代碼抽取到某個(gè)方法中,在需要這份代碼的地方調(diào)用方法即可
抽取代碼的思路

將相同的代碼放到一個(gè)方法中

將不同的值當(dāng)做方法參數(shù)傳進(jìn)來(lái)

掌握

按鈕的多功能使用

@2x的含義

應(yīng)用程序圖標(biāo)、啟動(dòng)圖片的添加

狀態(tài)欄

在iOS7中,狀態(tài)欄默認(rèn)情況下歸控制器管理,比如狀態(tài)欄的樣式、狀態(tài)欄的是否可見(jiàn)

控制器通過(guò)重寫(xiě)以下方法來(lái)控制狀態(tài)欄

設(shè)置狀態(tài)欄的樣式

(UIStatusBarStyle)preferredStatusBarStyle;

其中UIStatusBarStyleLightContent是白色樣式

設(shè)置狀態(tài)欄的可見(jiàn)性

  • (BOOL)prefersStatusBarHidden;
未命名圖片1.png

未命名圖片.png

應(yīng)用程序啟動(dòng)圖片

一個(gè)app在啟動(dòng)過(guò)程中會(huì)全屏顯示叫做Default.png的圖片

不同規(guī)格Default的使用場(chǎng)合

Default.png:非retina-iPhone屏幕,320x480

Default@2x.png:retina-iPhone屏幕,640x960

Default-568h@2x.png:4inch的retina-iPhone屏幕,640x1136

Default-Portrait~ipad.png:非retain-iPad豎屏屏幕,768x1024

Default-Portrait~ipad@2x.png:retain-iPad豎屏屏幕,1536x2048

Default-Landscape~ipad.png:非retain-iPad橫屏屏幕,1024x768

Default-Landscape~ipad@2x.png:retain-iPad橫屏屏幕,2048x1536

UIButton

UIButton有很多種狀態(tài),它提供了一些便捷屬性,可以直接獲取當(dāng)前狀態(tài)下的文字、文字顏色、圖片等

@property(nonatomic,readonly,retain) NSString *currentTitle;

@property(nonatomic,readonly,retain)UIColor *currentTitleColor;

@property(nonatomic,readonly,retain)UIImage *currentImage;

@property(nonatomic,readonly,retain) UIImage
*currentBackgroundImage;

未命名圖片2.png

UIButton和UIImageView

相同點(diǎn)

都能顯示圖片

不同點(diǎn)

UIButton默認(rèn)情況就能監(jiān)聽(tīng)點(diǎn)擊事件,而UIImageView默認(rèn)情況下不能

UIButton可以在不同狀態(tài)下顯示不同的圖片

UIButton既能顯示文字,又能顯示圖片

如何選擇

UIButton:需要顯示圖片,點(diǎn)擊圖片后需要做一些特定的操作
UIImageView:僅僅需要顯示圖片,點(diǎn)擊圖片后不需要做任何事情
UIImage:父類為NSObject,不是一個(gè)控件,只是一個(gè)圖片

NSArray和NSDictionary的使用

當(dāng)圖片內(nèi)容非常多時(shí),“根據(jù)index來(lái)設(shè)置內(nèi)容”的代碼就不具備擴(kuò)展性,要經(jīng)常改動(dòng)

為了改變現(xiàn)狀,可以考慮將圖片數(shù)據(jù)線保存到一個(gè)數(shù)組中,數(shù)組中有序地放著很多字典,一個(gè)字典代表一張圖片數(shù)據(jù),包含了圖片名、圖片描述

@property (strong, nonatomic) NSArray *images;

由于只需要初始化一次圖片數(shù)據(jù),因此放在get方法中初始化

將屬性放在get方法中初始化的方式,稱為“懶加載”\”延遲加載”

什么是Plist文件

直接將數(shù)據(jù)直接寫(xiě)在代碼里面,不是一種合理的做法。如果數(shù)據(jù)經(jīng)常改,就要經(jīng)常翻開(kāi)對(duì)應(yīng)的代碼進(jìn)行修改,造成代碼擴(kuò)展性低

因此,可以考慮將經(jīng)常變的數(shù)據(jù)放在文件中進(jìn)行存儲(chǔ),程序啟動(dòng)后從文件中讀取最新的數(shù)據(jù)。如果要變動(dòng)數(shù)據(jù),直接修改數(shù)據(jù)文件即可,不用修改代碼

一般可以使用屬性列表文件存儲(chǔ)NSArray或者NSDictionary之類的數(shù)據(jù),這種屬性列表文件的擴(kuò)展名是plist,因此也成為“Plist文件”

未命名圖片4.png

解析Plist文件

接下來(lái)通過(guò)代碼來(lái)解析Plist文件中的數(shù)據(jù)

獲得Plist文件的全路徑

NSBundle *bundle = [NSBundle mainBundle];

NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];

加載plist文件

_images = [NSArray arrayWithContentsOfFile:path];

-(NSArray *)images

{

if (_images == nil) {

  NSBundle *bundle = [NSBundle mainBundle];

  NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];

    _images= [NSArray arrayWithContentsOfFile:path];


}

return _images;

}

未命名圖片5.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容