六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 141|回复: 0

iOS中资源文件的”另类“处理方式

[复制链接]

升级  84%

56

主题

56

主题

56

主题

秀才

Rank: 2

积分
176
 楼主| 发表于 2012-10-24 22:59:40 | 显示全部楼层 |阅读模式
早上研究了一下SMCalloutView,发现作者在代码中直接将图片作成了字符串放在了源代码文件中。 这样做的好处是程序依赖的资源文件同code直接放置在了一起,使用的时候只要把源代码拷贝进去就可以了。 要折腾倒也挺简单的:先将图片资源转成Base64字符串,再将字符串声明成常量。使用的时候使用NSData转换一下,再转成UIImage就可以使用了:
+ (UIImage *)embeddedImageNamed:(NSString *)name {    if ([UIScreen mainScreen].scale == 2)        name = [name stringByAppendingString:@"$2x"];        SEL selector = NSSelectorFromString(name);        if (![(id)self respondsToSelector:selector]) {        NSLog(@"Could not find an embedded image. Ensure that you've added a category method to UIImage named +%@", name);        return nil;    }        // We need to hush the compiler here - but we know what we're doing!    #pragma clang diagnostic push    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"    NSString *base64String = [(id)self performSelector:selector];    #pragma clang diagnostic pop        UIImage *rawImage = [UIImage imageWithData:[self dataWithBase64EncodedString:base64String]];    return [UIImage imageWithCGImage:rawImage.CGImage scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表