温故而知新, 记录下
Settings Bundle
在Xcode上
command+n
, 选择创建Settings Bundle
, 名字Test.bundle
;在
Test.bundle
上右键New Folder
新建文件夹images
, 把一个图片文件laowen.png
拖进去;-
把bundle内
laowen.png
图片拿出使用:
NSString *strResourcesBundle = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"bundle"];
NSString *strC = [[NSBundle bundleWithPath:strResourcesBundle] pathForResource:@"laowen" ofType:@"png" inDirectory:@"images"];
UIImage *imgC = [UIImage imageWithContentsOfFile:strC];
self.iv.image = imgC;
```
macOS下的Bundle
在项目的
TARGETS
下点+
号添加一个bundle, 选macOS
下的Bundle
创建一个MyBundle
;在
MyBundle
的Build Setting
下Base SDK
改成Latest iOS
;往
MyBundle
内新建images
文件夹并添加图片laowen.png
;把
images
拖入项目,要选Create groups
;选择
MyBundle
项目,Command+B
编译;-
在项目的
Build Phases
添加一个Run Script
, 加入下面脚本:cp -R ${BUILT_PRODUCTS_DIR}/MyBundle.bundle ${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app
-
在项目中使用这个Bundle内的资源:
#define MyLibBUNDLE_NAME @ "MyBundle.bundle" #define MyLibBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MyLibBUNDLE_NAME] #define MyLibBUNDLE [NSBundle bundleWithPath: MyLibBUNDLE_PATH] UIImage *img = [UIImage imageWithContentsOfFile:[[MyLibBUNDLE resourcePath] stringByAppendingPathComponent:@"test.png"]];
其实, 直接建一个Bundle项目打包一个.bundle文件出来, 复制到需要的项目中使用, 这样比建一个Bundle附加在项目中这种做法更方便.
- 如果遇到错误:
pngcrush caught libpng error:
,- 原因:该文件不是真正的png文件,可能是个jpg文件,实际的文件头信息是不一样的,造成不能识别
- 解决方法有两种:
- 重新把图片文件处理成png文件
- 修改文件名后缀,比如改成.jpg
Mac检测图片格式的方法
Mac检测图片格式并不是使用后缀名,而是使用文件头信息来判断识别.可以通过UltraEdit来打开图片,16进制查看。
- JPEG/JPG - 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) - 文件结束标识 (2 bytes): $ff, $d9 (EOI)
- TGA - 未压缩的前5字节 00 00 02 00 00 - RLE压缩的前5字节 00 00 10 00 00
- PNG - 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
- GIF - 文件头标识 (6 bytes) 47 49 46 38 39(37) 61 G I F 8 9 (7) a
- BMP - 文件头标识 (2 bytes) 42 4D B M
- PCX - 文件头标识 (1 bytes) 0A
- TIFF - 文件头标识 (2 bytes) 4D 4D 或 49 49
- ICO - 文件头标识 (8 bytes) 00 00 01 00 01 00 20 20
- CUR - 文件头标识 (8 bytes) 00 00 02 00 01 00 20 20
- IFF - 文件头标识 (4 bytes) 46 4F 52 4D F O R M
- ANI - 文件头标识 (4 bytes) 52 49 46 46 R I F F