1. 什么是Bundle文件
- Bundle 文件,簡單理解,就是資源文件包。我們將許多圖片、XIB、文本文件組織在一起,打包成一個 Bundle 文件。方便在其他項目中引用包內的資源。
- Bundle 文件是靜態的,也就是說,我們包含到包中的資源文件作為一個資源包是不參加項目編譯的。也就意味著,bundle 包中不能包含可執行的文件。它僅僅是作為資源,被解析成為特定的 2 進制數據。
2. 如何制作靜態的Bundle文件
- 新建Bundle項目(本文教程使用Xcode8.3.3)
Bundle 默認是 macOS 系統的,所以創建的時候要在 macOS => Framework & Library 選項下。
圖1.png
Product Name “Loading” 就是最后要生成的 Bundle 文件名稱
圖2.png
圖3.png
項目創建完 我們發現Loading.bundle 是紅色的 并且設備只能是Mac, 接下來就是修改 Bundle 配置信息,使其能用于iOS
- 修改 Bundle 配置信息
- 修改成iOS系統, 選擇iOS SDK 為
Latest iOS(iOS 10.3)
圖4.png
- Bundle 中的圖片默認是 tiff 格式了 需要修改Bulide Settings 中的
COMBINE_HIDPI_IMAGES
為NO
圖5.png
- 添加需要打包的文件(本例中是圖片 也可以是XIB文件等)
將圖片拖到Loading文件夾中
圖5.png
- 編譯生成 Bundle 文件
我們分別選擇 Generic iOS Device 和任意一個模擬器各編譯一次,編譯完后,我們會看到工程中 Products 文件夾下的 SourcesBundle.bundle 由紅色變成了黑色。
圖6.png
圖7.png
然后點擊SourcesBundle.bundle 右鍵選擇show in finder 然后選擇顯示包內容就可以看到文件資源
圖8.png
圖9.png
圖10.png
3. 如何使用 (以加載本地gif為例)
- 先將生成的真機(Debug-iphoneos)Bundle 資源文件拖拽到需要使用的工程中
- 獲取bundle中的圖片資源
NSFileManager *manager = [NSFileManager defaultManager];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Loading" ofType:@"bundle"];
NSArray *array = [manager contentsOfDirectoryAtPath:path error:nil];
NSMutableArray *imageArr = [NSMutableArray arrayWithCapacity:0];
for (NSString *name in array) {
/// 拼接路徑
UIImage *image = [UIImage imageNamed:[path stringByAppendingPathComponent:name]];
if (image) {
[imageArr addObject:image];
}
}
/// 設置圖片幀數組
self.myImageView.animationImages = imageArr;
/// 設置動畫時長
self.myImageView.animationDuration = 5;
/// 動畫是否重復(0代表無線循環)
self.myImageView.animationRepeatCount = 0;
/// 開啟動畫
[self.myImageView startAnimating];