我想缓存一条阴影路径以使性能UITableView
更好。
我读过https://yalantis.com/blog/mastering-uikit-performance/说
if let rect = cell.imageView?.bounds {
cell.imageView?.layer.shadowPath = UIBezierPath(rect: rect).cgPath
}
将停止屏幕外的阴影,但是使用以下功能
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Cell data: \(data[indexPath.row])"
if let rect = cell.imageView?.bounds {
cell.imageView?.layer.shadowPath = UIBezierPath(rect: rect).cgPath
}
cell.imageView?.layer.shadowRadius = 8
cell.imageView?.layer.shadowOffset = CGSize(width: 3, height: 3)
cell.imageView?.layer.shadowOpacity = 0.5
cell.imageView?.layer.cornerRadius = 20
cell.imageView?.image = UIImage(named: "PlaceholderImage")
return cell
}
产生一个结果,其中有些单元格有阴影,有些则没有。
如何在一个简单的方法中实现对所有单元格的影子路径的缓存 UITableView
问题是这些行:
if let rect = cell.imageView?.bounds {
cell.imageView?.layer.shadowPath = UIBezierPath(rect: rect).cgPath
}
如果imageView
从未为该单元分配图像,frame
则为.zero
,因此bounds
为.zero
。因此,shadowPath
最终cgPath
得到的只是一个点,并且没有阴影出现。
我要解决的方法是完全不使用内置imageView
属性。我将在我自己的图像视图中使用可以控制其帧的自定义单元类,而不是imageView
播放这些技巧的内置单元。