在iPhone上加载10多张图片?

时间:2011-02-27 06:33:31

标签: iphone image uiscrollview

我正在尝试在ScrollView上添加10张以上的图片。

NSUInteger i;
for (i = 1; i <= numberOfImage; i++)
{
    NSString *imageName = [NSString stringWithFormat:@"d%dimage%d.png", imageSection, i];               

    UIImage *image = [UIImage imageNamed:imageName];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
    CGRect rect = imageView.frame;
    rect.size.height = kScrollObjHeight;
    rect.size.width = kScrollObjWidth;
    imageView.frame = rect;
    imageView.tag = i;  // tag our images for later use when we place them in serial fashion
    [scrollView addSubview:imageView];
    [imageView release];
}

此代码来自Apple示例,它运行正常。但如果变量'i'大于10,'UIImage * image'为空。 imageName似乎是正确的。但我不知道为什么它不加载图像。有没有人看到问题?

还有一件事。如果我喜欢这样,iOS会自动控制内存吗?我的意思是,如果所有(超过10个)图像都加载到内存中,即使它们没有显示,也会浪费内存。我听说iOS加载的图像只显示在屏幕上,而免费图像则不显示。是对的吗?

感谢阅读。

6 个答案:

答案 0 :(得分:1)

UIimage imageNamed:缓存文件内容。我建议你使用UIImage + imageWithContentsOfFile:在这种情况下根本不缓存。

答案 1 :(得分:0)

您可能需要相应地设置contentSize。

除非您使用基于CATiledLayer的UIView,否则IOS不会执行该魔术内存管理。

如果未创建UIImage,则因为该名称未引用资源文件夹中的图像而您应该有例外。

答案 2 :(得分:0)

您必须确保图像具有正确的名称(如0dimage11.jpg)并添加到XCode项目中。

答案 3 :(得分:0)

您需要拥有正确的文件名。你说你认为文件名是正确的。

NSLog(@"Loop %d: d%dimage%d.png", i,imageSection, i]);

注销文件名,以便查看名称实际名称。将该行放在循环中。

NSUInteger i;
for (i = 1; i <= numberOfImage; i++)
{
    NSString *imageName = [NSString stringWithFormat:@"d%dimage%d.png", imageSection, i];               
    NSLog(@"Loop %d: d%dimage%d.png", i,imageSection, i]);
    UIImage *image = [UIImage imageNamed:imageName];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
    CGRect rect = imageView.frame;
    rect.size.height = kScrollObjHeight;
    rect.size.width = kScrollObjWidth;
    imageView.frame = rect;
    imageView.tag = i;  // tag our images for later use when we place them in serial fashion
    [scrollView addSubview:imageView];
    [imageView release];
}

然后监视调试器中的文件名,看看这些图像文件是否存在,以及Apple放置图像文件的目录。

答案 4 :(得分:0)

嘿,这不是一次加载10张图片的好方法。你做的所有事情都是正确的,你的图像显示为空,请检查日志可能有记忆警告。你可以苹果的样本代码photoscroller。它会做你想要的所有事情,也管理好记忆。有两种方法,一种是使用CATieldLayer,另一种是直接加载图像。我建议你使用使用CATieldLayer的方法。

答案 5 :(得分:0)

对不起伙计们。结果证明这是我的错。好吧,不完全是我的错。设计师向我扔了许多文件,如d1imgae11.png错误的文件名...无论如何,你们所有人的提示给了我不同的视图来看问题,我得到了另一个关于不缓存图像的提示。感谢。