New file |
| | |
| | | // |
| | | // NSBundle+YYAdd.m |
| | | // YYCategories <https://github.com/ibireme/YYCategories> |
| | | // |
| | | // Created by ibireme on 14/10/20. |
| | | // Copyright (c) 2015 ibireme. |
| | | // |
| | | // This source code is licensed under the MIT-style license found in the |
| | | // LICENSE file in the root directory of this source tree. |
| | | // |
| | | |
| | | #import "NSBundle+YYAdd.h" |
| | | #import "NSString+YYAdd.h" |
| | | #import "YYCategoriesMacro.h" |
| | | |
| | | YYSYNTH_DUMMY_CLASS(NSBundle_YYAdd) |
| | | |
| | | @implementation NSBundle (YYAdd) |
| | | |
| | | + (NSArray *)preferredScales { |
| | | static NSArray *scales; |
| | | static dispatch_once_t onceToken; |
| | | dispatch_once(&onceToken, ^{ |
| | | CGFloat screenScale = [UIScreen mainScreen].scale; |
| | | if (screenScale <= 1) { |
| | | scales = @[@1,@2,@3]; |
| | | } else if (screenScale <= 2) { |
| | | scales = @[@2,@3,@1]; |
| | | } else { |
| | | scales = @[@3,@2,@1]; |
| | | } |
| | | }); |
| | | return scales; |
| | | } |
| | | |
| | | + (NSString *)pathForScaledResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)bundlePath { |
| | | if (name.length == 0) return nil; |
| | | if ([name hasSuffix:@"/"]) return [self pathForResource:name ofType:ext inDirectory:bundlePath]; |
| | | |
| | | NSString *path = nil; |
| | | NSArray *scales = [self preferredScales]; |
| | | for (int s = 0; s < scales.count; s++) { |
| | | CGFloat scale = ((NSNumber *)scales[s]).floatValue; |
| | | NSString *scaledName = ext.length ? [name stringByAppendingNameScale:scale] |
| | | : [name stringByAppendingPathScale:scale]; |
| | | path = [self pathForResource:scaledName ofType:ext inDirectory:bundlePath]; |
| | | if (path) break; |
| | | } |
| | | |
| | | return path; |
| | | } |
| | | |
| | | - (NSString *)pathForScaledResource:(NSString *)name ofType:(NSString *)ext { |
| | | if (name.length == 0) return nil; |
| | | if ([name hasSuffix:@"/"]) return [self pathForResource:name ofType:ext]; |
| | | |
| | | NSString *path = nil; |
| | | NSArray *scales = [NSBundle preferredScales]; |
| | | for (int s = 0; s < scales.count; s++) { |
| | | CGFloat scale = ((NSNumber *)scales[s]).floatValue; |
| | | NSString *scaledName = ext.length ? [name stringByAppendingNameScale:scale] |
| | | : [name stringByAppendingPathScale:scale]; |
| | | path = [self pathForResource:scaledName ofType:ext]; |
| | | if (path) break; |
| | | } |
| | | |
| | | return path; |
| | | } |
| | | |
| | | - (NSString *)pathForScaledResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath { |
| | | if (name.length == 0) return nil; |
| | | if ([name hasSuffix:@"/"]) return [self pathForResource:name ofType:ext]; |
| | | |
| | | NSString *path = nil; |
| | | NSArray *scales = [NSBundle preferredScales]; |
| | | for (int s = 0; s < scales.count; s++) { |
| | | CGFloat scale = ((NSNumber *)scales[s]).floatValue; |
| | | NSString *scaledName = ext.length ? [name stringByAppendingNameScale:scale] |
| | | : [name stringByAppendingPathScale:scale]; |
| | | path = [self pathForResource:scaledName ofType:ext inDirectory:subpath]; |
| | | if (path) break; |
| | | } |
| | | |
| | | return path; |
| | | } |
| | | |
| | | @end |