Как обновить UIImageView после загрузки изображения в Playground
Я играю на детской площадке, пытаясь лучше понять загрузку и настройку асинхронных изображений.
Я использую NSURLSession DataTask, и у меня есть отличные данные об изображении - я могу подтвердить это с помощью Quick Look на Playground.
Я также использую платформу XCPlayground, чтобы установить страницу как нуждающуюся в неопределенном выполнении, а liveView для currentPage является целевым imageView.
Тем не менее, что-то по-прежнему не хватает, и представление в реальном времени не обновляется должным образом. Есть идеи? То, что я хочу сделать, сводится к следующему коду. Вы можете увидеть состояние детской площадки на скриншоте:
import UIKit
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
let someImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 256, height: 256))
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
session.dataTaskWithRequest(NSURLRequest(URL: NSURL(string: "http://www.stridesapp.com/strides-icon.png")!))
{
data, response, error in
if let data = data
{
print(data)
someImageView.image = UIImage(data: data)
}
}.resume()
XCPlaygroundPage.currentPage.liveView = someImageView
1 ответ
Учитывая, что NSURLSession
не будет запускать обработчик завершения в главной очереди, вы должны самостоятельно отправить обновление представления в основную очередь:
import UIKit
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
let someImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 256, height: 256))
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
session.dataTaskWithRequest(NSURLRequest(URL: NSURL(string: "http://www.stridesapp.com/strides-icon.png")!)) { data, response, error in
if let data = data {
print(data)
dispatch_async(dispatch_get_main_queue()) {
someImageView.image = UIImage(data: data)
}
}
}.resume()
XCPlaygroundPage.currentPage.liveView = someImageView
Таким образом: