iOS的Bundle資源束製做

在靜態庫的製做中,不少時候咱們的靜態庫也是帶着文件,圖片和多媒體資源的。android

若只是直接加入到項目中也是能夠,可是,考慮到方便管理(方便插件使用者的管理),咱們但願把插件的資源文件打成一個包來管理。api

 

固然有人也會說,那我直接在項目中新建一個group來管理也是同樣的容易。框架

此刻,我只能很裝逼的說一句:這樣,顯得專業點麼~。url

你看three20啊,銀聯啊等等。總體項目目錄相對看起來簡約點。spa

 

bundle的製做。插件

1.新建一個文件夾,而後將文件夾命名修改你要的文件夾名,而且加上後綴:xxx.bundle。code

而後你就會看到文件夾變成了一個咱們常見的bundle樣式的文件夾。對象

 

2.加入文件資源,此時爲了方便管理,咱們最好如今裏面新建3種資源的文件夾blog

    

固然了,不建立也不要緊,可是這個images文件夾最好建立,由於,咱們會把全部的圖片資源放在這裏來方便管理。three

而後添加點圖片到images中。

3.把bundle文件加入到項目中

  

4.讀取和使用文件。

 UILabel *la = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 50, 50)];
 la.text = @"老王";
 NSString *image_url = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"nono.bundle/images/android.png"];
 la.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:image_url]];

 

此時,由於之前咱們獲取UIImage對象大部分都是直接使用的api爲:

 

[UIImage imageNamed:@"android.png"]

方法其實也是經過相對路徑給咱們找到了圖片資源。

可是在咱們本身製做的bundle文件夾的圖片資源則不能使用該方法來找到了。

咱們每次指定圖片須要傳入一個很長的地址,以爲比較麻煩。可是咱們會發現,圖片都是在xxx.bundle/images下面。

那麼咱們也可使用宏或是類別來定義一個方法來簡單到和[UIImage imageNamed:@"android.png"]同樣。只需一個文件名就好了。

 

宏的表現能夠參考three20下的

TTIMAGE(@"bundle://Three20.bundle/images/backIcon.png")

 

返回的就是一個image對象。

three20框架中實際上是使用了scheme的思想,bundle://和document;//來加載不一樣文件夾下的資源。

加載自定義bundle文件夾下的圖片最後就是根據

先獲取應用的絕對路徑 

 mainbundle_path = [NSBundlemainBundle] resourcePath] ;

而後截取了bundle://後面的path 和mainbundle_path組裝成最後的地址。

 

對於咱們,簡單的實現能夠直接使用類別

1  -(UIImage*) imagesNamedFromCustomBundle:(NSString *)name {
2      NSString *main_images_dir_path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"nono.bundle/images"];
3  //    NSAssert(main_images_dir_path, @"main_images_dir_path is null");
4      NSString *image_path = [main_images_dir_path stringByAppendingPathComponent:name];
5      return [UIImage imageWithContentsOfFile:image_path];
6  }

建立一個UIImage的類別,添加這個擴展的方法。

相關文章
相關標籤/搜索