1. 程式人生 > >runtime 替換系統 imageNamed 方法,同時適配iphone和ipad圖片

runtime 替換系統 imageNamed 方法,同時適配iphone和ipad圖片

建立 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"];