使用 Swift 将新图像分配给 UIImageView

Posted

技术标签:

【中文标题】使用 Swift 将新图像分配给 UIImageView【英文标题】:Assign a new image to UIImageView with Swift 【发布时间】:2014-07-23 19:14:19 【问题描述】:

我正在使用 Xcode 6 Beta 4,我正在尝试检索远程图像并将其分配给 UIImageView。我正在使用 NSURLSession dataTask 来使这个异步。这是我的代码:

func dataTask(imageUrl: String, targetImage:UIImageView) 

    let nsURL = NSURL(string: imageUrl)

    let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL) 
        (data, response, error) in
        if !error 
            NSLog("No Error!")                
            var image:UIImage = UIImage(data: data)
            targetImage.image = image
        
        else 
            NSLog("Error!")
        
    

    task.resume()

这就是我打电话的方式:

        self.dataTask("http://bicicletaspony.com/img/spn/TeamA.png", targetImage: image)

这是我得到的错误:(

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“不得从后台线程执行对布局引擎的修改。”

这是一个非常简单的图像分配。为什么会这样崩溃?!任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

dataTaskWithURL 结束时运行的闭包在后台线程上调用。 UIKit(像大多数其他工具包一样)只能从主线程调用。您需要在主线程上设置图像,如下所示:

if !error 
    NSLog("No Error!")             
    var image:UIImage = UIImage(data: data)
    dispatch_async(dispatch_get_main_queue(), 
        targetImage.image = image
    )

【讨论】:

iain 感谢您这么快的回复!您的代码也成功了!

以上是关于使用 Swift 将新图像分配给 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

将鼠标悬停在缩略图上以启动新图像;悬停结束后新图像仍然存在

如何使用 imagemagick 将透明 png 旋转 45 度并保持新图像透明?

PHAsset:使用元数据保存新图像

Cloudinary overwrite=false 仍将现有图像作为新图像上传

对在新图像集中设置啥像素大小感到困惑

如何在 Swift 3.0 中使用 SwiftyJSON 将 JSON 数据分配给 UILabel?