项目之前利用自定义类方法实现夜间模式图片的加载,但是用的自定义方法显然没有系统方法看起来舒服,代码移植性好,更重要的是不能使用KSImageNamed插件提示图片,相比之前各种前后缀,分辨率等判断,利用runtime看起来简洁多了,使用方法与系统一样。
说明:对于大部分图片是不分白天,夜间模式的,所有首先查找正常图片,如果没有找到,判断App为哪种模式进行加载。白天模式-图片加上后缀_day,夜间_night
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #import "UIImage+imageNamed.h" #import <objc/runtime.h>
@implementation UIImage (imageNamed)
+ (void)load{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Method m1 = class_getClassMethod([UIImage class], @selector(imageNamed:)); Method m2 = class_getClassMethod([UIImage class], @selector(HJ_imageNamed:)); method_exchangeImplementations(m1, m2); }); }
+(UIImage *)HJ_imageNamed:(NSString *)imageName{ UIImage *result = nil; result = [UIImage HJ_imageNamed:imageName]; BOOL isNight=YES; if (!result) { if (isNight) { imageName = [imageName stringByAppendingString:@"_night"]; } else { imageName = [imageName stringByAppendingString:@"_day"]; } result = [UIImage HJ_imageNamed:imageName]; } return result; }
@end
|