为什么表格视图滚动滞后?

时间:2016-06-09 08:30:01

标签: ios swift uitableview

我实现了一个表视图,但滚动是滞后的。为什么会滞后?我正在重复使用电池,但它仍然滞后。当我滚动时,内存会出现峰值并在滚动停止时恢复正常。如果有任何用处,我在表格视图单元格中实现了一个集合视图。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell: BoxCell = table.dequeueReusableCellWithIdentifier("CELL", forIndexPath: indexPath) as! BoxCell

    cell.pic.image = pic[indexPath.row].circle


    return cell
}

extension UIImage {
var circle: UIImage? {
    let square = CGSize(width: min(size.width, size.height), height: min(size.width, size.height))
    let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: square))
    imageView.contentMode = .ScaleAspectFill
    imageView.image = self
    imageView.layer.cornerRadius = square.width/2
    imageView.layer.masksToBounds = true
    UIGraphicsBeginImageContext(imageView.bounds.size)
    guard let context = UIGraphicsGetCurrentContext() else { return nil }
    imageView.layer.renderInContext(context)
    let result = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return result
}

}

2 个答案:

答案 0 :(得分:0)

你的影像有多大?如果他们是大图像表会减速。我最近遇到过这个问题。使用较小的图像使其再次更快。

答案 1 :(得分:0)

在这个单元格中发生了很多事情,可能会降低其资源。例如,每次滚动表视图时都会重新加载集合视图。 “cell.collectionview.reloadData()”。也许获取单元格的内容并在Awake From Nib自定义单元格中加载一次,而不是每次滚动表格视图时调用每个单元格的所有操作符,图像和坐标。内存是尖峰,因为每次滚动时,无论多大,都会重新加载集合视图。一切都在主线程上处理。也许将一些图像布局代码移动到后台线程以获得更平滑的滚动操作。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
    //Image work here (including image if statement)
}) 

理想情况下,将图像加载从nib唤醒,以便加载一次。