基本上我的代码大量使用[UIImage imageNamed]
,默认情况下会从应用包中提取图片。
现在我想要从Documents(或库或其他)深处的目录中返回图像 - 而不是主束。由于有很多imageNamed调用实例,我正在考虑为此目的扩展(读取替换)UIImage ImageNamed实现。
我已经完成了this,但无法完全理解我应该做什么,以及什么是最好的:
我也不知道是否需要照顾@ 2x图像。我目前的捆绑包包括一堆,我想我的实现也必须要处理它。但不确定如何。
答案 0 :(得分:5)
最干净,最优雅,最容易维护的长期解决方案是在UIImage上使用类别。在UIImage上定义自定义方法,然后使用Find&替换以将所有imageNamed调用替换为新方法。
不要使用调配(它会引入奇怪的,未记录的错误),并且很难维护或调试。 (另外,如果你调侃,它会在做想要使用imageNamed的默认实现的地方中断)。
由于您不需要实例方法,因此无需为您尝试执行的操作创建UIImage的子类。
答案 1 :(得分:1)
如果这是从文档目录中检索图像的唯一问题,请尝试:
[UIimage imageWithContentsOfFile:yourFilePath];
//您可以使用这些方法来检索文件路径
- (NSString *) rootPath{
return [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) lastObject];
}
- (NSString *) pathFoResourse : (NSString *) resourseName ofType: (NSString *)type{
NSString *path = [[self rootPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", resourseName, type]];
if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
path = [[NSBundle mainBundle] pathForResource:resourseName ofType:type];
}
NSLog(@"**path:%@**", path);
return path;
}
答案 2 :(得分:0)
最好和最简单的方法是使用Category。它使代码可读。 子类可能会在工作期间使您感到困惑 这个Question将向您解释为什么不使用Method Swizzling