ios - 无法更改 UIImageView 图像

标签 ios uiimageview uiimage

我有一个 IBOutletUIImageView,叫做 attachmentImage。默认情况下,它有一个通过 Storyboard添加的占位符图像。

如果图像已经存在,则使用 setImageWithURL 显示它。这有效并显示图像。从 viewDidLoad

调用
[self.attachmentImage setImageWithURL:[NSURL URLWithString:attachmentImageURL]];
self.attachmentImage.contentMode = UIViewContentModeScaleAspectFill;
self.attachmentImage.clipsToBounds = YES;
[attachmentImage setNeedsDisplay];

如果图片不存在,则从库中选择并添加;

- (void)takeController:(FDTakeController *)controller gotPhoto:(UIImage *)photo withInfo:(NSDictionary *)info {
    [attachmentImage setImage:nil];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    self.attachmentImage.contentMode = UIViewContentModeScaleAspectFill;
    [self.attachmentImage setImage:photo];
    self.attachmentImage.clipsToBounds = YES;
    [attachmentImage setNeedsDisplay];
}

如果没有已添加的图像(占位符除外),则上传有效。但是,如果 ImageView 具有使用 setImageWithURL 设置的图像,则该图像不会被替换。

为什么会这样?帮助!

编辑 现在图像确实发生了变化,但会在一两秒后恢复原状。这是我对 setImageWithURL 函数所做的更改;

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(queue, ^{
            attachmentImageURL = [NSString stringWithFormat:@"%@%@", BaseURL, imgpath];
            NSURL *url = [NSURL URLWithString:attachmentImageURL];
            NSData *data = [NSData dataWithContentsOfURL:url];

            if (![data isEqualToData:nil]) {
                UIImage *image = [UIImage imageWithData:data];
                dispatch_async(dispatch_get_main_queue(), ^{
                    attachmentImage.image = image;
                    self.attachmentImage.contentMode = UIViewContentModeScaleAspectFill;
                    self.attachmentImage.clipsToBounds = YES;
                    [attachmentImage setNeedsDisplay];

                    [self applyImageViewConstraints];
                });
            }

        });

这么近。

最佳答案

我会先尝试删除 setNeedsDisplay - 在大多数情况下 UIImageView 不需要

如果这不起作用,则您的代码的第一部分似乎由于某种原因在第二部分之前运行。我会进行一些记录调用以检查真正的执行顺序。

如果一切都失败了,你可以通过延迟调用来实现一个非常 hacky 的解决方案..

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC),    
dispatch_get_main_queue(), ^{ .... }

此外,如果这解决了问题,它可以为您提供线索,提示您在那 2 秒内运行了一些意外代码。

关于ios - 无法更改 UIImageView 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25611262/

相关文章:

iphone - NSAssert undeclared first use 为什么?

ios - Pixelart 使用 UIImageView 变得模糊

ios - ios中的徒手裁剪

iphone - 对于大图像,UIImage imageNamed 是否仍然会导致 iOS 4 上的内存问题?

ios - UIScrollView 中图像上的 cropImage 方法问题产生错误的图像

objective-c - UIImage 调整大小并裁剪以适合

javascript - 想要在激活 iOS 键盘时调整浏览器视口(viewport)的大小

ios - 如何快速删除 UICollectionView 中各部分之间的空格

ios - 从 View Controller 到 View Controller 的通用函数传输

ios - 按下并拖动橡皮擦以在 swift2 中创建 uiimageview