我已经创建了一些自定义图层并添加到UIView上,我有两个CAShaper图层,但是我仅在此处显示一个示例
hexBorderOtline = CAShapeLayer()
hexBorderOtline.name = "dhiru_border_hidden"
hexBorderOtline.path = path2.cgPath
hexBorderOtline.lineCap = .round
hexBorderOtline.strokeColor = inActiveBorderColor.cgColor
hexBorderOtline.fillColor = UIColor.clear.cgColor
self.layer.addSublayer(hexBorderOtline)
我想在单击按钮时更改其边框颜色。
func btnAction()
{
hexBorderOtline.strokeColor = activeBorderColor.cgColor
}
但是这不起作用,我正在发布一张参考图像,只需单击一下按钮即可完成。
答案 0 :(得分:0)
尝试一下:
func btnAction()
{
hexBorderOtline.removeFromSuperlayer()
hexBorderOtline.strokeColor = activeBorderColor.cgColor
self.layer.addSublayer(hexBorderOtline)
}
没有UIView:
class ViewController: UIViewController {
var hexBorderOtline: CAShapeLayer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
hexBorderOtline = CAShapeLayer()
hexBorderOtline.name = "dhiru_border_hidden"
hexBorderOtline.path = UIBezierPath(arcCenter: CGPoint(x:self.view.frame.size.width/2, y: self.view.frame.size.height/2), radius: self.view.frame.size.height/2, startAngle: 180, endAngle: 0.0, clockwise: true).cgPath
hexBorderOtline.lineCap = .round
hexBorderOtline.strokeColor = UIColor.gray.cgColor
hexBorderOtline.fillColor = UIColor.clear.cgColor
self.view.layer.addSublayer(hexBorderOtline)
}
@IBAction func updateColor(_ sender: Any) {
hexBorderOtline.removeFromSuperlayer()
hexBorderOtline.strokeColor = UIColor.red.cgColor
self.view.layer.addSublayer(hexBorderOtline)
}
}
答案 1 :(得分:0)
如果只有两层显示具有颜色的活动和不活动模式,则可以创建两个具有不同笔触颜色的单独层,并将它们作为子层添加到主层中。您想要显示的默认图层颜色应在之后添加。单击该按钮后,您只需要隐藏/显示子图层即可。
希望这会有所帮助。
答案 2 :(得分:0)
您切换形状图层的笔触颜色的方法是正确的:
我正在做的是:
var enabled = false
@IBAction func didTapButton(_ sender: Any) {
enabled = !enabled
hexBorderOtline.strokeColor = enabled ? activeBorderColor.cgColor : inActiveBorderColor.cgColor
}
因此,您的问题出在其他地方。例如:
也许您要更改颜色的图层上有另一个形状图层。
也许您的ivar指向另一个形状层。
或者您的按钮可能未连接到btnAction
例程(缺少任何@IBAction
或@objc
会让我怀疑您没有调用此例程) 。
这将是简单的事情。
我建议您在创建print(hexBorderOtline)
的位置添加CAShapeLayer
,然后在btnAction
中再次添加并确认两者:
您会看到两组print
语句;和
他们正在打印与形状层关联的相同内存地址(即,确保它们引用的是同一形状层)。
但这一定是这样的。这是更改strokeColor
的正确方法,它将自动为您更新形状图层。您的问题出在其他地方。