异步 ActivityIndicator - Swift
ActivityIndicator in asynchronous - Swift
我的代码很重 - 异步加载图像。
,
但是 Activity 指示器不工作。请帮我找出错误
func loadImage() {
if let imageUrl = NSURL(string: "http://\($url)/1.jpg") {
let imageRequest: NSURLRequest = NSURLRequest(URL: imageUrl)
let queue: NSOperationQueue = NSOperationQueue.mainQueue()
NSURLConnection.sendAsynchronousRequest(imageRequest, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
if data != nil {
self.image = UIImage(data: data)!
self.productImageView.image = self.image
}
})
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.imageActivityIndicator.startAnimating()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
self.loadImage()
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.imageActivityIndicator.stopAnimating()
})
});
}
发生这种情况是因为您在 viewDidLoad
中使用 imageActivityIndicator
并且视图尚未添加到主视图中,所以如果您将代码移至 viewWillAppear
函数。
另外,当图片加载完成时你必须隐藏它,所以你的代码如下:
func loadImage() {
if let imageUrl = NSURL(string: "http://skidon.info/1.jpg") {
let imageRequest: NSURLRequest = NSURLRequest(URL: imageUrl)
let queue: NSOperationQueue = NSOperationQueue.mainQueue()
NSURLConnection.sendAsynchronousRequest(imageRequest, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
if data != nil {
self.image = UIImage(data: data)!
self.productImageView.image = self.image
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.imageActivityIndicator.stopAnimating()
self.imageActivityIndicator.hidden = true
})
}
})
}
}
override func viewWillAppear() {
super.viewWillAppear()
self.imageActivityIndicator.startAnimating()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
self.loadImage()
});
}
我的代码很重 - 异步加载图像。
func loadImage() {
if let imageUrl = NSURL(string: "http://\($url)/1.jpg") {
let imageRequest: NSURLRequest = NSURLRequest(URL: imageUrl)
let queue: NSOperationQueue = NSOperationQueue.mainQueue()
NSURLConnection.sendAsynchronousRequest(imageRequest, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
if data != nil {
self.image = UIImage(data: data)!
self.productImageView.image = self.image
}
})
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.imageActivityIndicator.startAnimating()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
self.loadImage()
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.imageActivityIndicator.stopAnimating()
})
});
}
发生这种情况是因为您在 viewDidLoad
中使用 imageActivityIndicator
并且视图尚未添加到主视图中,所以如果您将代码移至 viewWillAppear
函数。
另外,当图片加载完成时你必须隐藏它,所以你的代码如下:
func loadImage() {
if let imageUrl = NSURL(string: "http://skidon.info/1.jpg") {
let imageRequest: NSURLRequest = NSURLRequest(URL: imageUrl)
let queue: NSOperationQueue = NSOperationQueue.mainQueue()
NSURLConnection.sendAsynchronousRequest(imageRequest, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
if data != nil {
self.image = UIImage(data: data)!
self.productImageView.image = self.image
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.imageActivityIndicator.stopAnimating()
self.imageActivityIndicator.hidden = true
})
}
})
}
}
override func viewWillAppear() {
super.viewWillAppear()
self.imageActivityIndicator.startAnimating()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
self.loadImage()
});
}