NSURLConnection的渐进式JPG下载
问题描述:
我正在尝试创建一个渐进式JPG加载器。当一张大图像传入我的NSURLConnection时,它似乎将图像的一半切掉。NSURLConnection的渐进式JPG下载
这是我didReceiveData
方法和图像数据被分配到:
func connection(connection: NSURLConnection!, didReceiveData data: NSData!){
if let img: UIImage = UIImage(data: data){
imageView.image = img
}
print("didReceiveData")
}
似乎跳过数据的最后一个块,完成图像。一个例子形象是:
该图像传递给connectionDidFinishLoading
已完成,但显然不是。任何人有任何想法,为什么会发生?
答
代理optional public func connection(connection: NSURLConnection, didReceiveData data: NSData)
假设是回调来递增加载数据。每次被调用时,您都会收到新的可用数据。因此,如果您尝试使用接收到的数据设置创建图像,它将不会是完整的图像。相反,你应该试试这个
@IBOutlet weak var imageView: UIImageView!
var receivedData = NSMutableData()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let imageURL = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/leisa_christmas_false_color.png?itok=75o-jlD5";
let request = NSURLRequest(URL: NSURL(string: imageURL)!)
let urlConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)
urlConnection?.start()
}
extension ViewController: NSURLConnectionDelegate, NSURLConnectionDataDelegate {
func connection(connection: NSURLConnection, didReceiveData data: NSData) {
self.receivedData.appendData(data)
}
func connectionDidFinishLoading(connection: NSURLConnection) {
self.imageView.image = UIImage(data: receivedData)
}
}
我希望这会帮助你。