ios - 滚动后 UITableViewCell 内的 UIView 中的渐变发生了变化
问题描述
我已经UIView
在我的UITableViewCell
. 在第一次加载时一切正常,但在滚动后,渐变颜色会再次加载,并且每次都会改变位置而不是实际设置条件。这是我实现渐变颜色的代码:
我该怎么办?
添加渐变层
func gradient(frame:CGRect,colors: [CGColor]) -> CAGradientLayer {
let layer = CAGradientLayer()
layer.frame = frame
layer.startPoint = CGPoint(x: 1.0, y: 0.0)
layer.endPoint = CGPoint(x: 0.0, y: 1.0)
layer.locations = [0.5,0.35]
layer.colors = colors
return layer
}
UITableViewCell 类
class AllOfferlistCell: UITableViewCell {
@IBOutlet weak var lbltitle: UILabel!
@IBOutlet weak var lblPopular: UILabel!
@IBOutlet weak var VwPercentage: UIView!
}
表视图 cellForRowAtindexPath
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! AllOfferlistCell
cell.lbltitle.text = "Index \(indexPath.row)"
if self.DataArray[indexPath.row].Flag == "1"{
cell.VwPercentage.layer.insertSublayer(gradient(frame: cell.VwPercentage.bounds, colors: [UIColor.red.cgColor,UIColor.white.cgColor]), at: 1)
cell.lblPopular.text = "POPULAR"
}else{
cell.VwPercentage.layer.insertSublayer(gradient(frame: cell.VwPercentage.bounds, colors: [UIColor.blue.cgColor,UIColor.white.cgColor]), at: 1)
cell.lblPopular.text = "50% OFF"
}
return cell
}
输出 :
第一次加载
滚动后
解决方案
创建如下自定义视图
@IBDesignable class TriangleGradientView: UIView {
@IBInspectable var topColor: UIColor = UIColor.red {
didSet {
setGradient()
}
}
@IBInspectable var bottomColor: UIColor = UIColor.blue {
didSet {
setGradient()
}
}
override class var layerClass: AnyClass {
return CAGradientLayer.self
}
override func layoutSubviews() {
super.layoutSubviews()
setGradient()
}
private func setGradient() {
(layer as! CAGradientLayer).colors = [topColor.cgColor, bottomColor.cgColor]
(layer as! CAGradientLayer).startPoint = CGPoint(x: 1.0, y: 0.0)
(layer as! CAGradientLayer).endPoint = CGPoint(x: 0.0, y: 1.0)
(layer as! CAGradientLayer).locations = [0.5,0.35]
}
}
采用
在界面生成器中将 customclass 设置
VwPercentage
为TriangleGradientView
将
VwPercentage
类型更改为TriangleGradientView
.func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! AllOfferlistCell cell.lbltitle.text = "Index \(indexPath.row)" if self.DataArray[indexPath.row].Flag == "1"{ cell.VwPercentage.topColor = .red cell.lblPopular.text = "POPULAR" }else{ cell.VwPercentage.topColor = .blue cell.lblPopular.text = "50% OFF" } cell.VwPercentage.bottomColor = .white return cell }
推荐阅读
- log4j - log4j 是否支持符号链接日志文件?
- java - 嵌入式 tomcat java 应用程序正在运行,但无法访问服务器
- java - org.postgresql.util.PSQLException:致命:剩余的连接槽保留用于非复制超级用户连接
- three.js - 如何在threejs中保持精灵垂直堆叠?
- git - 一次运行删除多个分支
- android - 无法执行 aapt :app:processDebugResources FAILED
- javascript - 通过扩展点击页面上的一个元素,并在弹出窗口中获取点击的元素数量
- shell - jq显示一个json文件的不同字段
- class - 以不同的单位重用对象的属性
- sql - 在 PeopleSoft 查询管理器中按会计年度确定折旧