如何发布图像?

时间:2014-05-16 21:00:03

标签: ios objective-c cocoa-touch

我想发布图片,直到它们再次加载。 我用这段代码加载它们:

_backgroundImage1.image = [UIImage imageNamed:[NSString stringWithFormat:@"%ld.jpg", random() % 5]];

这就是我改变alpha

的方法
if (backCount == 100) {
        if (currentBack ==YES) {

        _backgroundImage1.alpha = _backgroundImage1.alpha - 0.01;
        _backgroundImage2.alpha = _backgroundImage2.alpha + 0.01;

        if (_backgroundImage2.alpha >= 1) {
            backCount = 0;
            currentBack = NO;
            NSString*path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%u", arc4random() % 4] ofType:@"jpg"];
            UIImage *Image = [UIImage imageWithContentsOfFile:path];
            _backgroundImage1.image = Image;

            //_backgroundImage1.image = nil;
            //_backgroundImage1.image = [UIImage imageNamed:[NSString stringWithFormat:@"%ld.jpg", random() % 5]];

        }
    } else {

3 个答案:

答案 0 :(得分:4)

imageNamed缓存图片。如果您不希望缓存它,请使用imageWithContentsOfFile

正如imageNamed文档警告我们:

  

如果您的图像文件只显示一次,并希望确保它不会添加到系统的缓存中,则应使用imageWithContentsOfFile:创建图像。这会将您的一次性图像保留在系统图像缓存之外,从而可能会改善应用程序的内存使用特性。

因此,你会:

NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%ld", random() % 5] ofType:@"jpg"]; 

_backgroundImage1.image = [UIImage imageWithContentsOfFile:path];

你后来说过你正在寻找“一幅从一张随机图片渐渐消失的动画”。在这种情况下,每次更改图像时,您可能只想这样做:

// fade from current image to new image

[UIView transitionWithView:imageView duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%ld", random() % 5] ofType:@"jpg"];
    imageView.image = [UIImage imageWithContentsOfFile:path];
} completion:^(BOOL finished) {
    // do whatever you want at the end
}];

答案 1 :(得分:0)

使用ARC:

_backgroundImage1=nil;

假设-backgroundImage1是保留给图像的唯一(强)引用。

没有ARC

[_backgroundImage1.image release];

嗯,假设_backgroundImage1是UIImageView的实例或者仍然想要访问其属性图像的任何内容,这可能是危险的。所以

_backgroundImage1=nil;

在这里也是一个好主意。

答案 2 :(得分:0)

imageNamed:在本地缓存图像。来自文档:

  

此方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在)。如果匹配的图像对象尚未在缓存中,则此方法从指定的文件加载图像数据,对其进行缓存,然后返回结果对象。

如果您希望每次都从磁盘加载图像,请使用imageWithContentsOfFile:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"yourImageName" ofType:@"yourImageFileType"];
UIImage *image = [UIImage imageWithContentsOfFile:filePath];