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

猜你喜欢

转载自blog.csdn.net/s12117719679/article/details/82974835