iOS-製作並呼叫Bundle資源包
背景:
在開發專案中,我們公司的產品要給別人用,除了把程式碼封裝成靜態庫之外,還需要把你的圖片等資源封裝成bundle包。
這樣,別人拿你的產品來用的時候,既不會看到你的程式碼,也看不到你的圖片等資源。如果他想要用你的圖片資源,那麼前提是他要知道你bundle裡面的圖片資源的名稱。
製作步驟:
一、建立bundle
專案
bundle
專案屬於mac
開發裡面的種類,所以選擇mac
下面的。
二、在Bundle
工程中建立Assets
檔案
因為Xcode
的Assets
裡面,可以自動識別圖片是二倍屏還是三倍屏(雖然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
資源包,就必須要清楚資源包內圖片名字,否則無法呼叫。