【问题标题】:Can't create UIImageView from file无法从文件创建 UIImageView
【发布时间】:2011-10-28 07:02:42
【问题描述】:

我在我的项目所在的同一目录中有一个 .png 格式的复选标记图像,名为“checkbox.png”。我想创建一个以该图像为背景的 UIImageView,并将其设置为一组 UITableViewCells 的附属视图。我目前有:

UIView * v = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkmark.png"]];
v.backgroundColor = [UIColor redColor];
cell.accessoryView = v;
[v autorelease];

这不起作用。我可以制作另一个虚拟 UIView(例如

v = [[UIView alloc] init]; 
v.backgroundColor = [UIColor redColor];

效果很好,它会在我的 uitableviewcells 的右侧显示一个小红框。我不确定为什么带有复选框的视图不起作用。我指定文件路径的方式有问题吗?

【问题讨论】:

  • 您是否检查了图像视图的框架以确保它具有一定的宽度和高度?

标签: ios cocoa-touch xcode4


【解决方案1】:

imageWithContentsOfFile: 需要文件的路径。如果你只是给它一个文件名,它会在当前目录中查找文件,但老实说,我不知道当前目录在 iOS 应用程序中通常是什么,或者即使有任何保证。

关键是,您要么需要为其提供文件的绝对路径,要么使用imageNamed:,它只需要一个名称并在主包的资源中查找。

换句话说:

UIImage *image = [UIImage imageNamed:@"checkmark"];
UIView *view = [[UIImageView alloc] initWithImage:image];

imageNamed: 的另一个优点是它会缓存图像(以防你再次使用它),如果你的设备有 Retina 显示屏,它会自动寻找checkmark@2x 版本。

如果不想要这种行为,可以直接获取路径:

NSString *imagePath = [[NSBundle mainBundle] pathForResourceNamed:@"checkmark" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

如果它是一个大图像并且你不想缓存它(因为你不会经常使用它),这通常是一个更好的选择。

【讨论】:

    【解决方案2】:

    如果你使用 imageWithContentsOfFile: 方法,你需要有文件路径。如果图像在您的主捆绑包中,那么以下方法可以解决问题:

     UIView * v = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]];
    

    【讨论】:

      【解决方案3】:

      确保您已将图像文件添加到您的 XCode 项目中。仅仅将它放在同一个目录中是不够的。在 XCode 中,选择 File 菜单,然后选择“Add Files to...”您的项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        • 2021-01-21
        相关资源
        最近更新 更多