iPhone、iPad開發之圖片資源管理
移動開發設計的設備、屏幕很多(如cocoa開發分為iPhone版、iPad版, 它們又分為橫屏、豎屏),所以圖片資源的統一管理是必要的。下面是自己想的一個解決方案,歡迎交流。
文件GGImageNameKey.h、GGImageNameKey.m用于管理圖片的名字。由一個鍵值,根據是iPhone、iPad、橫屏、豎屏等關聯出一個圖片的名字,從而實現圖片名字資源的統一管理。
文件GGImageManageService.h、GGImageManageService.m用于管理圖片資源,現在只有加載圖片資源的功能。
// 文件GGImageNameKey.h begin
#import <Foundation/Foundation.h>
@interface UZImageNameKey : NSObject {
}
+ (NSDictionary *)imageNameDatas;
@end
// 這里定義圖片資源的鍵值,有鍵值會關聯出一個圖片名
#define GGNextStepImage @"GGNextStepImage"
........... .............
// 文件GGImageNameKey.h end
// 文件GGImageNameKey. begin
#import "GGImageNameKey.h"
@implementation GGImageNameKey
+ (NSDictionary *)imageNameDatas {
/* 因為這個對象創建后放在自動釋放池里,在下一次runLoop中會被銷毀。
所以建議在程序運行中,該方法只調用一次,而且獲取資源后,需要retain一份 */
NSDictionary *dict = nil;
dict = [NSDictionary dictionaryWithObjectsAndKeys:
// 以此為iPhone橫屏、iPhone豎屏、iPad橫屏、iPad豎屏對應的圖片名字
[NSArray arrayWithObjects:@"GGNextStepIphoneL.png",@"GGNextStepIphoneP.png", @"GGNextStepIpadL.png",@"GGNextStepIpadP.png", nil],
GGNextStepImage,
... ...
nil];
return dict;
}
@end
// GGImageNameKey.m end
// GGImageManageService.h begin
#import <Foundation/Foundation.h>
#import "GGImageNameKey.h"
// 獲取圖片名字
#define GGImageNameForKey(key) [GGImageManageService imageNameForKey:key]
// 加載圖片
#define GGImageCacheForKey(key) [GGImageManageService imageCacheForKey:key]
#define GGImageForKey(key) [GGImageManageService imageForKey:key]
@interface GGImageManageService : NSObject {
NSDictionary *_datas; // 圖片資源數據
NSInteger _index; // 需要獲取的圖片類型的索引
}
// 由鍵值獲取一張圖片名
+ (NSString *)imageNameForKey:(NSString *)key;
// 加載一張圖片 注意:這種圖片加載方式,圖片是加載到iPhone系統緩存
+ (UIImage *)imageCacheForKey:(NSString *)key;
// 加載一張圖片
+ (UIImage *)imageForKey:(NSString *)key;
// 關閉服務
+ (void)shutdownService;
@property (nonatomic,retain) NSDictionary *datas;
@property (nonatomic) NSInteger index;
@end
// GGImageManageService.m end
// GGImageManageService.m begin
#import "GGImageManageService.h"
#import "GGImageNameKey.h"
static GGImageManageService *sGGImageManageService =nil;
@implementation UZImageManageService
@synthesize datas = _datas;
@synthesize index = _index;
- (id)init {
if (self = [super init]) {
_datas = [GGImageNameKey imageNameDatas];
[_datasretain];
NSInteger orientation = [[UIApplication sharedApplication] statusBarOrientation]; // 獲取屏幕方向
if (orientation ==UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
_index =0;
}
else {
_index =1;
}
if (0/**設備為iPad */) {
_index = _index +2;
}
}
return self;
}
+ (void)shutdownService {
SAFE_RELEASE(sGGImageManageService);
}
+ (void)createSelf {
if (sGGImageManageService ==nil) {
sGGImageManageService = [[GGImageManageService alloc] init];
}
}
+ (NSString *)imageNameForKey:(NSString *)key {
[GGImageMangeService createSelf];
return [[sGGImageManageService.datasobjectForKey:key] objectAtIndex:GGImageMangeService.index];
}
+ (UIImage *)imageForKey:(NSString *)key {
NSString *path = [[NSBundle mainBundle] pathForResource:[GGImageMangeService imageNameForKey:key] ofType:nil];
return [UIImage imageWithContentsOfFile:path];
}
+ (UIImage *)imageCacheForKey:(NSString *)key {
return [UIImage imageNamed:[GGImageMangeService imageNameForKey:key]];
}
- (void)dealloc {
SAFE_RELEASE(_datas);
[super dealloc];
}
@end
// GGImageMangeService end
說明:應用程序退出時,需要調用[GGImageMangeService shutdownService];
本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!