1

基本上我的代码大量使用[UIImage imageNamed]默认情况下从应用程序包中获取图像。

现在,我希望从 Documents(或库或其他)深处的目录返回图像,而不是从主包返回。由于 imageNamed 调用的实例太多,我正在考虑为此目的扩展(读取替换) UIImage ImageNamed 实现。

我已经经历了这个,但不能完全弥补我应该做什么,什么是最好的:

  1. 制作一个 UIImage 的类别
  2. 创建 UIImage 的子类
  3. 方法混搭

我也不知道我是否需要处理@2x 图像。我当前的捆绑包包括其中的一堆,我想我的实现也必须处理它。但不确定如何。

4

3 回答 3

5

最干净、最优雅和最容易维护的长期解决方案是在 UIImage 上使用一个类别。在 UIImage 上定义一个自定义方法,然后使用 Find & Replace 将所有 imageNamed 调用替换为新方法。

不要使用 swizzling(它会引入奇怪的、未记录的错误)并且很难维护或调试。(另外,如果你调配,它会在你想使用 imageNamed 的默认实现的地方中断)。

无需为您尝试做的事情继承 UIImage 子类,因为您不需要实例方法。

于 2013-02-27T21:00:31.443 回答
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;
}
于 2013-02-28T07:32:20.517 回答
0

最好和最简单的方法是使用类别。它使代码可读。子类在工作中可能会让你感到困惑 这个问题将向你解释为什么不使用 Method Swizzling

于 2013-02-27T21:04:49.473 回答