gpt4 book ai didi

ios - Swift:为什么添加图像 subview 需要这么长时间?

转载 作者:可可西里 更新时间:2023-11-01 00:18:15 27 4
gpt4 key购买 nike

我用 Swift 编写了一个简单的 TableView 应用程序。我正在尝试将图像传递到我的本地节点服务器,并让服务器发回这个接收到的图像,不以任何方式改变它,并将其显示在 iPhone 屏幕上。每个单元格中嵌入了一个按钮,用于启动此帖子/响应处理。该按钮调用以下函数:

func uploadImage() {
/* Encode UIImage to be passed to server */
let image = UIImage(named: "myImage.png")
let imageData = UIImageJPEGRepresentation(image, 1.0)
let base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!)
var params = ["username":"myUsername", "image": base64String ] as Dictionary

/* Set up request */
let url = NSURL(string: "http://localhost:3000/postRequestHere")
var request = NSMutableURLRequest(URL: url)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
var err: NSError?
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as NSDictionary

if(err) {
println(err!.localizedDescription)
}
else {
/* Server returns JSON as follows: {"success":imageData} */
var success = json["success"] as NSString
let successData = NSData(base64EncodedString: success, options: NSDataBase64DecodingOptions.fromMask(0))

/* Begin Reference A */
let returnImage = UIImage(data: successData)
let newImageView = UIImageView(image: returnImage)
newImageView.frame = self.view.bounds
self.view.addSubview(newImageView)
self.view.bringSubviewToFront(newImageView)
/* End Reference A */
}
})

task.resume()
}

我得到的图像是正确的,一切正常。但是,显示图像(来自引用 A)大约需要 20 秒。我什至在引用 A 中使用了本地镜像,没有使用从服务器返回的数据,这仍然需要相同的时间。如果我将引用 A 放在任务之外,使用本地镜像,它会立即显示。

我通过在模拟器中运行来测试。

最佳答案

您正在 secondary thread 上添加 newImageView。所有 UI 都必须在 main thread 上更新。所以调用 addSubview 在主线程上。用这个替换你的代码

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
dispatch_async(dispatch_get_main_queue()) {
// update UI on the main thread
let newImageView = UIImageView(image: returnImage)
newImageView.frame = self.view.bounds
self.view.addSubview(newImageView)
self.view.bringSubviewToFront(newImageView)
}
}

关于ios - Swift:为什么添加图像 subview 需要这么长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25090145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com