Uitableview 仅在swift中滚动时栅格化tableview的单元格

Uitableview 仅在swift中滚动时栅格化tableview的单元格,uitableview,swift,Uitableview,Swift,我有一个具有漂亮图形的tableview(圆角、使用clearcolor()的透明单元格等),我也使用maskToBounds,因此使滚动平滑的唯一方法是设置layer.shouldRasterize=true。 这很好,但当我删除单元格或拖动单元格以移动和重新排列时,我会看到“工件”,主要是单元格在tableview中的一瞬间失去了透明度,因为单元格正在从光栅化更新其内容 我只想在滚动tableviewcells时将其光栅化,因此我尝试了各种方法,包括一种非常脏的方法,在tableView.c

我有一个具有漂亮图形的tableview(圆角、使用clearcolor()的透明单元格等),我也使用maskToBounds,因此使滚动平滑的唯一方法是设置layer.shouldRasterize=true。 这很好,但当我删除单元格或拖动单元格以移动和重新排列时,我会看到“工件”,主要是单元格在tableview中的一瞬间失去了透明度,因为单元格正在从光栅化更新其内容

我只想在滚动tableviewcells时将其光栅化,因此我尝试了各种方法,包括一种非常脏的方法,在tableView.contentOffset.y更改后,我将其光栅化为true,然后将其延迟一秒钟,以模拟滚动所需的时间并将其设置回false

func延迟(延迟:双精度,闭包:()->()){
发送后(
调度时间(
现在发送时间,
Int64(延迟*双倍(纳秒/秒))
),
dispatch_get_main_queue(),闭包)
}
func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->tableView单元格{
var cell=tableView.dequeueReusableCellWithIdentifier(“cell”,forIndexPath:indexPath)作为TableViewCell
cell.textLabel?.text=cellitemcontent[indexPath.row]
//这里我有所有的定制单元设计。。。
var currentOffset=tableView.contentOffset.y
cell.layer.shouldRasterize=true
如果currentOffset>0
{cell.layer.shouldRasterize=true}
否则{
延迟(1.5){
cell.layer.shouldRasterize=false
}
}
返回单元
}
有人能告诉我一个更干净的方法吗?
谢谢。

我想买房子

weak var tableView : UITableView!
var isScrolling = false
随着UITableViewDelegate协议扩展UIScrollViewDelegate,我将实现

func visibleCellsShouldRasterize(aBool:Bool){
    for cell in tableView.visibleCells() as [UITableViewCell]{
        cell.layer.shouldRasterize = aBool;
    }
}

func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    isScrolling = false
    self.visibleCellsShouldRasterize(isScrolling)
}

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    if velocity == CGPointZero{
        isScrolling = false
        self.visibleCellsShouldRasterize(isScrolling)
    }
}

func scrollViewWillBeginDragging(scrollView: UIScrollView) {
    isScrolling = true
    self.visibleCellsShouldRasterize(isScrolling)

}
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.layer.shouldRasterize = isScrolling
}