iPhone、iPad開發之圖片資源管理

fmms 12年前發布 | 61K 次閱讀 iPhone iPad iOS開發 移動開發

        移動開發設計的設備、屏幕很多(如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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!