我的问题是当我向下滚动UITableView时,它看起来太迟钝了。这些图片来自facebook。
我的代码
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("UserCell", forIndexPath: indexPath) as UITableViewCell
let user = users[indexPath.row] as User //2
if let nameLabel = cell.viewWithTag(100) as? UILabel { //3
nameLabel.text = user.name
}
if let dateCreatedLabel = cell.viewWithTag(101) as? UILabel {
dateCreatedLabel.text = user.distance
}
if let profilePictureView = cell.viewWithTag(103) as? UIImageView {
if let url = NSURL(string: "https://graph.facebook.com/\(user.profilePhoto)/picture?type=large") {
if let data = NSData(contentsOfURL: url){
profilePictureView.contentMode = UIViewContentMode.ScaleAspectFit
profilePictureView.image = UIImage(data: data)
}
}
}
return cell
}
请建议如何顺利。
答案 0 :(得分:4)
data = NSData(contentsOfURL:url)
这就是为什么你表示滞后,你很幸运能够快速上网。如果您的连接速度很慢,那么您的app会挂起,可能会永远。总是不经意地做网络!
此外,当您使网络异步时,您的tableView仍然会滞后:
UIImage(数据:数据)
如果您的单元格中有许多控件,即使在这里:
cell.viewWithTag(101)
所以,使用一些库来下载图像,这显然不是那么简单的任务,根据你的经验,你不会自己做正确的事(我可以看到)。
为您的单元格制作单独的课程,并使用IB连接插座。
尝试AFNetworking,它有UIImageView类别下载图像。
答案 1 :(得分:3)
我已经找到了答案。请使用Haneke
代替NSData
。
import Haneke
/* .. */
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("UserCell", forIndexPath: indexPath) as UITableViewCell
let user = users[indexPath.row] as User //2
if let nameLabel = cell.viewWithTag(100) as? UILabel { //3
nameLabel.text = user.name
}
if let dateCreatedLabel = cell.viewWithTag(101) as? UILabel {
dateCreatedLabel.text = user.distance
}
if let profilePictureView = cell.viewWithTag(103) as? UIImageView {
if let url = NSURL(string: "https://graph.facebook.com/\(user.profilePhoto)/picture?type=large") {
profilePictureView.contentMode = UIViewContentMode.ScaleAspectFit
profilePictureView.hnk_setImageFromURL(url!)
}
}
return cell
}