Ios UIBezierPath绘制的三角形视图的颜色不变
我想画一个三角形视图,并通过编程更改填充颜色 下面是我的代码Ios UIBezierPath绘制的三角形视图的颜色不变,ios,swift,xcode,Ios,Swift,Xcode,我想画一个三角形视图,并通过编程更改填充颜色 下面是我的代码 导入UIKit 类ViewController:UIViewController{ 设triangleView=triangleView() 重写func viewDidLoad(){ super.viewDidLoad() //加载视图后执行任何其他设置。 triangleView.frame=CGRect(x:0, y:100, 宽度:50, 身高:50) self.view.addSubview(三角形视图) } 覆盖函数视图显
导入UIKit
类ViewController:UIViewController{
设triangleView=triangleView()
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
triangleView.frame=CGRect(x:0,
y:100,
宽度:50,
身高:50)
self.view.addSubview(三角形视图)
}
覆盖函数视图显示(u动画:Bool){
super.viewdide显示(动画)
triangleView.drawColor(颜色:。黄色)
}
}
类TriangleView:UIView{
let path=UIBezierPath()
重写函数绘图(rect:CGRect){
打印(“三角视图绘制”)
移动路径(到:CGPoint(x:0,y:self.bounds.height/2))
addLine(to:CGPoint(x:self.bounds.maxX,y:0))
addLine(到:CGPoint(x:self.bounds.maxX,y:self.bounds.maxY))
path.addLine(to:CGPoint(x:0,y:self.bounds.height/2))
path.close()
self.drawColor(颜色:。绿色)
self.backgroundColor=.clear
}
func drawColor(颜色:UIColor){
打印(“TriangleView drawColor”)
color.setFill()
path.lineWidth=0
path.fill()
path.stroke()
}
}
在此代码中,TriangleView
绘制一个填充绿色的三角形
之后,ViewController
将填充颜色更改为黄色
跟踪结果
有两个问题
清晰
黄色
有人能给我一些建议吗?使用
UIGraphicsGetCurrentContext
class TriangleView: UIView {
private var triangleColor: UIColor = .green {
didSet {
self.setNeedsDisplay()
}
}
override func draw(_ rect: CGRect) {
print("TriangleView draw")
self.backgroundColor = .white // Set any background color
guard let context = UIGraphicsGetCurrentContext() else { return }
context.saveGState()
defer { context.restoreGState() }
let path = UIBezierPath()
path.move(to: CGPoint(x: 0, y: self.bounds.height / 2))
path.addLine(to: CGPoint(x: self.bounds.maxX, y: 0))
path.addLine(to: CGPoint(x: self.bounds.maxX, y: self.bounds.maxY))
path.addLine(to: CGPoint(x: 0, y: self.bounds.height / 2))
path.close()
context.addPath(path.cgPath)
context.setFillColor(triangleColor.cgColor)
context.closePath()
context.closePath()
context.fillPath()
context.restoreGState()
}
func drawColor(color: UIColor) {
triangleColor = color
}
}
或者您可以使用CAShapeLayer
class TriangleView: UIView {
private let shapeLayer = CAShapeLayer()
override init(frame: CGRect) {
super.init(frame: frame)
self.initialConfig()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialConfig()
}
override func draw(_ rect: CGRect) {
print("TriangleView draw")
self.shapeLayer.frame = self.bounds
drawShape()
}
private func initialConfig() {
self.backgroundColor = .white
self.shapeLayer.fillColor = UIColor.green.cgColor
self.layer.addSublayer(shapeLayer)
}
private func drawShape() {
let path = UIBezierPath()
path.move(to: CGPoint(x: 0, y: self.bounds.height / 2))
path.addLine(to: CGPoint(x: self.bounds.maxX, y: 0))
path.addLine(to: CGPoint(x: self.bounds.maxX, y: self.bounds.maxY))
path.addLine(to: CGPoint(x: 0, y: self.bounds.height / 2))
path.close()
shapeLayer.path = path.cgPath
}
func drawColor(color: UIColor) {
self.shapeLayer.fillColor = color.cgColor
}
}
谢谢大家!<代码>UIGraphicsGetCurrentContext对我不起作用。当
ViewController
不调用drawColor
时,背景色仍为黑色。但是,CAShapeLayer
工作正常!我用它代替我的。非常感谢。