- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我用 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/
我有一个独立的 Thread 应用程序。这是一个等待消息的监听器,当消息到达时执行一些操作,其中我必须将消息保存在数据库中。但我遇到了问题,因为如果我运行应用程序并“手动发送消息”,一切都会正常工作,
我有以下php代码: sleep(65); $query = "UPDATE database.table SET XXXXXXX = XXXXXXX - ".$YYYYYY." WHERE
我正在开发一个业余爱好应用程序。它在主布局中使用 webview。单击 webview 内的链接会使用户保持在 webview 内。启动后一切正常,但仍在应用程序内。但是,在手机休眠一段时间后,我重新
我目前运行的应用程序需要最大堆大小为 16GB。 目前我使用以下标志来处理垃圾回收。 -XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSIniti
$ uname -a Darwin Wheelie-Cyberman 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011
在 while 循环仍在休眠时退出它的最简单方法是什么?是否有某种函数可以在 sleep 时检测某个值是否为真? 或者我是否在循环中设置一个小 sleep 并检查如果不再睡一会儿就退出?如果可以,我该
我正在 Ubunu 的 Jetty 6 上运行 Java Web 服务器,用于基于反向 ajax 的 Web。而且我在向浏览器重新发送数据的线程滞后方面遇到了严重的问题。很多时候,一些线程开始 hib
当我运行长时间操作时,我遇到来自 IIS 的请求超时。我的 ASP.NET 应用程序正在后台处理数据,但处理的记录数量很大,因此操作需要很长时间。 但是,我认为 IIS 使 session 超时。这是
我不确定从哪里开始解决这个问题,但如果我有一个 AJAX 网络应用程序向服务器发送请求并在数据库(在我的例子中是 postgresql)上运行长查询,有没有办法停止或如果仍在运行时用户刷新页面或关闭
我是一名优秀的程序员,十分优秀!