我抓到一个方法,可以在网路上下载图片
func loadImageFromUrl(url: String, view:UIImageView ,Location:String){
// Create Url from string
let url = NSURL(string: url)!
// Download task:
// - sharedSession = global NSURLCache, NSHTTPCookieStorage and NSURLCredentialStorage objects.
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (responseData, responseUrl, error) -> Void in
// if responseData is not null...
if let data = responseData{
// execute in UI thread
dispatch_async(dispatch_get_main_queue(), { () -> Void in
view.image = UIImage(data: data)
})
}
}
}
// Run task
task.resume()
//return UIImageView(image: tmpImg)
}
当然,这个func并不是即时的 ,因为下载要时间
那我的 tableview delegate
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
let newsImageView = UIImageView(frame: CGRectMake(0, 0, frameWidth,140 ))
//先给他一个临时的图片
newsImageView.image = UIImage(named: "tnews")
//之后再下载图片
MyFunc.loadImageFromUrl(webImageURL + "news/" + (Data[indexPath.row]["iphoto"] as! String) ,view: newsImageView, Location: "newslist")
let newTitlelabelFont = UIFont(name: "Heiti TC", size: 16)
let newsTitleLabelHight = MyFunc.heightForView(Data[indexPath.row]["Subject"] as! String, font: newTitlelabelFont!, width: 16)
let newsTitlelabel = UILabel(frame: CGRectMake(0,newsImageView.frame.height + 5 ,frameWidth,newsTitleLabelHight ))
newsTitlelabel.numberOfLines = 0
newsTitlelabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
newsTitlelabel.font = newTitlelabelFont
newsTitlelabel.text = Data[indexPath.row]["Subject"] as! String
newsTitlelabel.textColor = MyFunc.colorHex("#ff69b4")
newsTitlelabel.sizeToFit()
cell.addSubview(newsImageView)
cell.addSubview(newsTitlelabel)
return cell
}
可是在这样的情况之下,我就没办法去自动修正高度了?像这样的东西应该要怎么作修正 (这种code应该有很多人写过吧....)
问2
也是类似以上的问的,我一样用上面的方式在网路上下载图片
我在下载完 json后,执行以下的func
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
do {
//JSON资料处理
let dataDic = try NSJSONSerialization.JSONObjectWithData(NSData(contentsOfURL: location)!, options: NSJSONReadingOptions.MutableContainers)
if dataDic.count <= 0 {
MyFunc.showAlertWithMessage("没有资料")
return
}
pushOtherView(dataDic as! NSMutableArray)
} catch {
MyFunc.showAlertWithMessage("网路错误!")
}
}
func pushOtherView(Data:NSMutableArray){
let tmpViewController:newsListViewController = newsListViewController()
self.dismissViewControllerAnimated(true) { () -> Void in
if self.transManager == nil {
self.transManager = TransitionManager()
}
let transition = CATransition()
transition.duration = 1
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
transition.type = kCATransitionFade
self.mainVC.navigationController?.view.layer.addAnimation(transition, forKey: nil)
tmpViewController.refreshWithFrame(CGRectMake(0, 0, self.frameWidth, self.frameHeight), newListArray: Data)
self.mainVC.navigationController!.pushViewController(tmpViewController, animated: true)
}
}
因为 session 的 delegatge 是下载json完成后,才会执行以上的func
现我想要 把所有的图片(每一笔array就有一张图,以十笔来说好了) ,存在一个 [UIImageView]的array里
有没有方法,所有的图片都存在 array里后,再执pushOtherView
(我发现我的表达能力很差,不知道各位大大能不能了解我想表达的意思, 突然觉得我很 烦人)
简单,提前将一部分图片下载好,然后计算好对应每个cell的高度,然后再
reloadData可以通过上拉刷新,预加载来下载其他部分的图片并计算好高度,数组形式缓存好
我在swift里面没接触过自动修复高度
PS:方法很多,要非常流畅的tableView要做的还很多
问题2,回调是异步的无法确定顺序