runtime 替換系統 imageNamed 方法,同時適配iphone和ipad圖片
阿新 • • 發佈:2018-12-19
建立 UIImage 分類
UIImage+Category.h
#import <UIKit/UIKit.h>
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_PAD (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad)
NS_ASSUME_NONNULL_BEGIN
@interface UIImage (Category)
@end
NS_ASSUME_NONNULL_END
UIImage+Category.m 檔案
#import "UIImage+Category.h" #import <objc/runtime.h> @implementation UIImage (Category) +(void)load { Method imageNamed = class_getClassMethod(self,@selector(imageNamed:)); Method mkeImageNamed =class_getClassMethod(self,@selector(mke_imageNamed:)); method_exchangeImplementations(imageNamed, mkeImageNamed); } +(instancetype)mke_imageNamed:(NSString*)name{ // UIImage * image; if( IS_IPHONE ){ // iphone處理 UIImage * image = [self mke_imageNamed:name]; if (image != nil) { return image; }else { return nil; } } else { // ipad處理 UIImage *image = [self mke_imageNamed:[NSString stringWithFormat:@"%@_ipad",name]]; if (image != nil) { return image; }else { image = [self mke_imageNamed:name]; return image; } }
使用:
UIImageView *imageview = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 100, 100)];
imageview.image = [UIImage imageNamed:@"icon"];