- Save bstahlhood/3711077 to your computer and use it in GitHub Desktop.
Swizzled UIImage imageNamed for iPhone 5
| // | |
| // UIImage+Retina4.h | |
| // StunOMatic | |
| // | |
| // Created by Benjamin Stahlhood on 9/12/12. | |
| // Copyright (c) 2012 DS Media Labs. All rights reserved. | |
| // | |
| #import <UIKit/UIKit.h> | |
| @interface UIImage (Retina4) | |
| @end |
| // | |
| // UIImage+Retina4.m | |
| // StunOMatic | |
| // | |
| // Created by Benjamin Stahlhood on 9/12/12. | |
| // Copyright (c) 2012 DS Media Labs. All rights reserved. | |
| // | |
| #import "UIImage+Retina4.h" | |
| #import <objc/objc-runtime.h> | |
| static Method origImageNamedMethod = nil; | |
| @implementation UIImage (Retina4) | |
| + (void)initialize { | |
| origImageNamedMethod = class_getClassMethod(self, @selector(imageNamed:)); | |
| method_exchangeImplementations(origImageNamedMethod, | |
| class_getClassMethod(self, @selector(retina4ImageNamed:))); | |
| } | |
| + (UIImage *)retina4ImageNamed:(NSString *)imageName { | |
| NSLog(@"Loading image named => %@", imageName); | |
| NSMutableString *imageNameMutable = [imageName mutableCopy]; | |
| NSRange retinaAtSymbol = [imageName rangeOfString:@"@"]; | |
| if (retinaAtSymbol.location != NSNotFound) { | |
| [imageNameMutable insertString:@"-568h" atIndex:retinaAtSymbol.location]; | |
| } else { | |
| CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; | |
| if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) { | |
| NSRange dot = [imageName rangeOfString:@"."]; | |
| if (dot.location != NSNotFound) { | |
| [imageNameMutable insertString:@"-568h@2x" atIndex:dot.location]; | |
| } else { | |
| [imageNameMutable appendString:@"-568h@2x"]; | |
| } | |
| } | |
| } | |
| NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageNameMutable ofType:@"png"]; | |
| if (imagePath) { | |
| return [UIImage retina4ImageNamed:imageNameMutable]; | |
| } else { | |
| return [UIImage retina4ImageNamed:imageName]; | |
| } | |
| return nil; | |
| } | |
| @end |
| // | |
| // UIImage+Retina4.h | |
| // StunOMatic | |
| // | |
| // Created by Benjamin Stahlhood on 9/12/12. | |
| // Copyright (c) 2012 DS Media Labs. All rights reserved. | |
| // | |
| #import <UIKit/UIKit.h> | |
| @interface UIImage (Retina4) | |
| @end |
| // | |
| // UIImage+Retina4.m | |
| // StunOMatic | |
| // | |
| // Created by Benjamin Stahlhood on 9/12/12. | |
| // Copyright (c) 2012 DS Media Labs. All rights reserved. | |
| // | |
| #import "UIImage+Retina4.h" | |
| #import <objc/runtime.h> | |
| #import <objc/message.h> | |
| static Method origImageNamedMethod = nil; | |
| @implementation UIImage (Retina4) | |
| + (void)initialize { | |
| origImageNamedMethod = class_getClassMethod(self, @selector(imageNamed:)); | |
| method_exchangeImplementations(origImageNamedMethod, | |
| class_getClassMethod(self, @selector(retina4ImageNamed:))); | |
| } | |
| + (UIImage *)retina4ImageNamed:(NSString *)imageName { | |
| NSLog(@"Loading image named => %@", imageName); | |
| NSMutableString *imageNameMutable = [imageName mutableCopy]; | |
| NSRange retinaAtSymbol = [imageName rangeOfString:@"@"]; | |
| if (retinaAtSymbol.location != NSNotFound) { | |
| [imageNameMutable insertString:@"-568h" atIndex:retinaAtSymbol.location]; | |
| } else { | |
| CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; | |
| if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) { | |
| NSRange dot = [imageName rangeOfString:@"."]; | |
| if (dot.location != NSNotFound) { | |
| [imageNameMutable insertString:@"-568h@2x" atIndex:dot.location]; | |
| } else { | |
| [imageNameMutable appendString:@"-568h@2x"]; | |
| } | |
| } | |
| } | |
| NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageNameMutable ofType:@"png"]; | |
| if (imagePath) { | |
| return [UIImage retina4ImageNamed:imageNameMutable]; | |
| } else { | |
| return [UIImage retina4ImageNamed:imageName]; | |
| } | |
| return nil; | |
| } | |
| @end |