gpt4 book ai didi

uitableview - 仅在快速滚动时栅格化表格 View 的单元格

转载 作者:可可西里 更新时间:2023-11-01 00:53:18 26 4
gpt4 key购买 nike

我有一个 tableview,它有漂亮的图形(圆角、使用 clearcolor() 的透明单元格等)。我也在使用 maskToBounds,所以使滚动平滑的唯一方法是设置 layer.shouldRasterize = true。这很好用,但是当我删除一个单元格或拖动一个单元格以移动和重新排列时,我看到“人工制品”,大多数情况下,我的表格 View 中的单元格会瞬间失去透明度,因为单元格正在更新其来自光栅化的内容

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

func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}

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

var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TableViewCell
cell.textLabel?.text = cellitemcontent[indexPath.row]
//here I have all the custom cell design...

var currentOffset = tableView.contentOffset.y
cell.layer.shouldRasterize = true
if currentOffset > 0
{ cell.layer.shouldRasterize = true}
else{
delay(1.5){
cell.layer.shouldRasterize = false

}
}
return cell
}

有人能告诉我一个更简洁的方法吗?谢谢。

最佳答案

我会拥有这些属性

weak var tableView : UITableView!
var isScrolling = false

随着 UITableViewDelegate 协议(protocol)扩展 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)

}

为可见单元格和进入屏幕的单元格切换 shouldRasterize,我会实现

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

关于uitableview - 仅在快速滚动时栅格化表格 View 的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29112364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com