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

 

posted @ 2018-11-08 09:47  小柯2  阅读(194)  评论(0)    收藏  举报