iOS-生成Bundle包-引入bundle-使用bundle

jiufreeman發表於2020-04-07
在我們使用第三方框架時,常常看到XXX.bundle的檔案。
我們找到該檔案,顯示包內容,大致看到很多資原始檔:圖片、配置文字、XIB檔案……
 
什麼是Bundle檔案?
簡單理解,就是資原始檔包。我們將許多圖片、XIB、文字檔案組織在一起,打包成一個Bundle檔案。方便在其他專案中引用包內的資源。
 
Bundle檔案的特點?
Bundle是靜態的,也就是說,我們包含到包中的資原始檔作為一個資源包是不參加專案編譯的。也就意味著,bundle包中不能包含可執行的檔案。它僅僅是作為資源,被解析成為特定的2進位制資料。
 
製作Bundle
 
1.新建bundle專案
iOS-生成Bundle包-引入bundle-使用bundle

2.新增需要的圖片
加入你需要編譯在bundle中的資原始檔。
當然,預設的配置也是可以的,如果你需要特定的優化或者特定的路徑配置,你可以進行下面第3步的配置。
 
3.你可以對編譯的bundle進行一些可選的設定(可選)
a.作為資源包,僅僅需要編譯就好,無需安裝相關的配置。
iOS-生成Bundle包-引入bundle-使用bundle
 
b.同樣要刪除安裝路徑。
iOS-生成Bundle包-引入bundle-使用bundle
 
c.該資源包的pch檔案和strings檔案是可以刪除的。
iOS-生成Bundle包-引入bundle-使用bundle
 
4.最好狀態下,要編譯出適用與iPhone的bundle檔案。
iOS-生成Bundle包-引入bundle-使用bundle
 
專案整合bundle
 
使用bundle就非常的easy了,將編譯好的XXXX.bundle 檔案直接加入到需要的專案中。省略了!
 
使用bundle中的資源
將要使用的bundle整合到專案中後,就可以使用了。需要注意的就是,bundle是靜態的,不進行編譯的資原始檔。所以,要使用bundle中的資源,就需要找到相應的資源路徑。
這裡廢話就不多說了,貼程式碼!
 
VC獲得bundle中的資源

 

NSString * bundlePath = [[ NSBundle mainBundlepathForResource: @ "MyBundle"ofType :@ "bundle"];

NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];

UIViewController *vc = [[UIViewController allocinitWithNibName:@"vc_name"bundle:resourceBundle];

 
圖片獲得bundle中的資源
 

UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

UIImage *image = [UIImage imageNamed:@"MyBundle.bundle/img_collect_success"];

[imgView setImage:image];

 
或者
 

UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"img_collect_success.png"];

UIImage *image_1=[UIImage imageWithContentsOfFile:imgPath];

[imgView setImage:image_1];

 
當然,可以寫成預編譯語句:

#define MYBUNDLE_NAME @ "MyBundle.bundle"

#define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME]

#define MYBUNDLE [NSBundle bundleWithPath: MYBUNDLE_PATH]

 
希望對你有所幫助!
轉自:http://blog.sina.com.cn/s/blog_7b9d64af0101jmj2.html

相關文章