1. 程式人生 > >iOS-製作並呼叫Bundle資源包

iOS-製作並呼叫Bundle資源包

背景:

在開發專案中,我們公司的產品要給別人用,除了把程式碼封裝成靜態庫之外,還需要把你的圖片等資源封裝成bundle包。
這樣,別人拿你的產品來用的時候,既不會看到你的程式碼,也看不到你的圖片等資源。如果他想要用你的圖片資源,那麼前提是他要知道你bundle裡面的圖片資源的名稱。

製作步驟:

一、建立bundle專案

bundle專案屬於mac開發裡面的種類,所以選擇mac下面的。

這裡寫圖片描述

二、在Bundle工程中建立Assets檔案

因為XcodeAssets裡面,可以自動識別圖片是二倍屏還是三倍屏(雖然iPhone X是超級視網膜屏,管他呢,反正現在10月份才出,現在暫不考慮)。所以,就在bundle

工程裡面建立一個Assets,到時候,我們就之別調用圖片名稱就好,會自動載入對應。

反正,只要你圖片的字尾是@2x,那麼你拖到Assets檔案裡面,他就自動到2x這個位置。字尾是@3x,同理,他也會自動到3x這個位置。

廢話不多說,先建立一個Assets檔案:

這裡寫圖片描述

這裡寫圖片描述



到這裡,你就知道了@2x字尾和@3x字尾在Assets裡面的作用了吧。這樣你直接訪問圖片名字(不帶字尾,他會自動識別的),就可以了。

三、Command + B編譯生成bundle

Command + B後生成Bundle包,點選Products裡面的bundle檔案,右鍵Show in Finder

找到Bundle包在哪裡。

這裡寫圖片描述

呼叫Bundle資源包:

Bundle包匯入專案中:

直接在該專案中,建立一個App專案。然後直接把這個Bundle資源包拉進去呼叫即可。(如果看不懂的話,直接建立一個新的空專案。那這段你就可以跳過了。)

切換工程時候:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

程式碼呼叫Bundle包的圖片資源:

核心程式碼:
[UIImage imageNamed:@"icon_Robot-Avatar" inBundle:ZFBundle compatibleWithTraitCollection:nil];

全部程式碼:

//
//  ViewController.m
// 測試Bundle資源包 // // Created by HZhenF on 2017/9/14. // Copyright © 2017年 GZHYTechnology. All rights reserved. // #import "ViewController.h" #define ZFBundle_Name @"testForBundle.bundle" #define ZFBundle_Path [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:ZFBundle_Name] #define ZFBundle [NSBundle bundleWithPath:ZFBundle_Path] @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; CGFloat X = 100; CGFloat Y = 100; CGFloat W = 100; CGFloat H = 100; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(X, Y, W, H)]; imageView.image = [UIImage imageNamed:@"icon_Robot-Avatar" inBundle:ZFBundle compatibleWithTraitCollection:nil]; [self.view addSubview:imageView]; } @end

這裡寫圖片描述


你會發現,即使是Bundle包裡面,不帶圖片字尾名也不會影響圖片的呼叫。

總結:

其實,Bundle資源包感覺和靜態庫是一個性質:就是不想透露我的東西別人知道。

和靜態庫相似之處就是:必須要知道你要呼叫的東西,才能呼叫到。

靜態庫是要把.h標頭檔案暴露出來,然後呼叫.h標頭檔案裡面的屬性或者方法,進而執行某些程式碼(包括暴露出來或者不暴露出來的程式碼)。而Bundle資源包,就必須要清楚資源包內圖片名字,否則無法呼叫。