关于stackoverflow的第一篇文章,首先,您好!
我是第一次在Swift上尝试工作,并且正在做一个项目,只是需要一些有关我遇到的问题的帮助。我有一个使用UIBezierPath的圆圈,我想动态更改其颜色。但是,当我尝试甚至对颜色进行“硬编码”时,都无法更改它。我试着看这里:如何在Swift中更改UIBezierPath的颜色?,但没有回答我的问题。但是,我确实看到那里的一个答案确实表明贝塞尔曲线路径没有颜色。如果是这样,我将如何改变沿其路径的圆的颜色?
这是我正在使用的代码:
outerCircle.path = UIBezierPath(ovalInRect: CGRect(x: 0.0, y: 0.0, width: frameSize.width, height: frameSize.height)).CGPath
outerCircle.lineWidth = 8.0
outerCircle.strokeStart = 0.0
outerCircle.strokeEnd = 0.45
outerCircle.lineCap = kCALineCapRound
outerCircle.fillColor = UIColor.clearColor().CGColor
outerCircle.strokeColor = UIColor.grayColor().CGColor
outerCircleView.layer.addSublayer(outerCircle)
outerCircle.strokeStart = 0.0
outerCircle.strokeEnd = 1.0
vibrancyView.contentView.addSubview(outerCircleView)
innerCircleView.frame.size = frameSize
let innerCirclePadding: CGFloat = 12
innerCircle.path = UIBezierPath(ovalInRect: CGRect(x: innerCirclePadding, y: innerCirclePadding, width: frameSize.width - 2*innerCirclePadding, height: frameSize.height - 2*innerCirclePadding)).CGPath
innerCircle.lineWidth = 4.0
innerCircle.strokeStart = 0.5
innerCircle.strokeEnd = 0.9
innerCircle.lineCap = kCALineCapRound
innerCircle.fillColor = UIColor.clearColor().CGColor
innerCircle.strokeColor = UIColor.grayColor().CGColor
innerCircleView.layer.addSublayer(innerCircle)
再次致歉,如果这是一个明显的答案或已经被回答。我感谢您提出的任何建议,可以为我指明正确的方向。谢谢你。
更新:这就是我尝试做的。我将内圆和外圆的填充和描边颜色更改为绿色,但是仍然有清晰的圆:
outerCircle.path = UIBezierPath(ovalInRect: CGRect(x: 0.0, y: 0.0, width: frameSize.width, height: frameSize.height)).CGPath
outerCircle.lineWidth = 8.0
outerCircle.strokeStart = 0.0
outerCircle.strokeEnd = 0.45
outerCircle.lineCap = kCALineCapRound
outerCircle.fillColor = UIColor.greenColor().CGColor
outerCircle.strokeColor = UIColor.greenColor().CGColor
outerCircleView.layer.addSublayer(outerCircle)
outerCircle.strokeStart = 0.0
outerCircle.strokeEnd = 1.0
vibrancyView.contentView.addSubview(outerCircleView)
innerCircleView.frame.size = frameSize
let innerCirclePadding: CGFloat = 12
innerCircle.path = UIBezierPath(ovalInRect: CGRect(x: innerCirclePadding, y: innerCirclePadding, width: frameSize.width - 2*innerCirclePadding, height: frameSize.height - 2*innerCirclePadding)).CGPath
innerCircle.lineWidth = 4.0
innerCircle.strokeStart = 0.5
innerCircle.strokeEnd = 0.9
innerCircle.lineCap = kCALineCapRound
innerCircle.fillColor = UIColor.greenColor().CGColor
innerCircle.strokeColor = UIColor.greenColor().CGColor
innerCircleView.layer.addSublayer(innerCircle)
我想让圆圈变色。
路径没有颜色。这是一条路!只有图形上下文具有笔触颜色/填充颜色。迟早会有一个图形上下文-没有一个贝塞尔曲线路径是没有用的。完成后,将其路径设置为贝塞尔曲线路径,根据需要设置其描边/填充颜色,然后描边/填充路径。Voilà。
在您的情况下,您似乎有一对CAShapeLayer对象。您可以更改其笔触/填充颜色,因为它们具有图形上下文-它们采用您指定的路径和颜色,并通过填充和抚摸路径为您绘制它们。美好的。但是您不能更改贝塞尔曲线路径的笔触或填充颜色-这只是一条路径。整个概念毫无意义。
说了这么多,到目前为止还不清楚您遇到什么问题。根据您的代码,我运行了一下:
class ViewController: UIViewController {
@IBOutlet weak var outerCircleView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let outerCircle = CAShapeLayer()
let frameSize = outerCircleView.frame.size
outerCircle.path = UIBezierPath(ovalInRect: CGRect(x: 0.0, y: 0.0, width: frameSize.width, height: frameSize.height)).CGPath
outerCircle.lineWidth = 8.0
outerCircle.strokeStart = 0.0
outerCircle.strokeEnd = 0.45
outerCircle.lineCap = kCALineCapRound
outerCircle.fillColor = UIColor.clearColor().CGColor
outerCircle.strokeColor = UIColor.grayColor().CGColor
outerCircleView.layer.addSublayer(outerCircle)
}
}
它会构建并运行,我确切地看到了我所期望看到的:一个粗的灰色部分圆圈:
这是因为该形状层具有透明的填充颜色和灰色的笔触颜色。如果您不喜欢这些颜色,请要求形状图层为您提供不同的颜色。
更新您更新了代码,以显示涉及绿色填充和描边的第二个版本。所以我尝试了您的第二个代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let outerCircle = CAShapeLayer()
let frameSize = outerCircleView.frame.size
outerCircle.path = UIBezierPath(ovalInRect: CGRect(x: 0.0, y: 0.0, width: frameSize.width, height: frameSize.height)).CGPath
outerCircle.lineWidth = 8.0
outerCircle.strokeStart = 0.0
outerCircle.strokeEnd = 0.45
outerCircle.lineCap = kCALineCapRound
outerCircle.fillColor = UIColor.greenColor().CGColor
outerCircle.strokeColor = UIColor.greenColor().CGColor
outerCircleView.layer.addSublayer(outerCircle)
outerCircle.strokeStart = 0.0
outerCircle.strokeEnd = 1.0
}
而且,正如预期的那样,我得到了一个绿色的圆圈(这不是一个确切的圆圈,但这仅仅是因为我的视图不是一个完美的正方形):
因此,我再一次也看不出问题出在哪里:您的代码执行了我希望您的代码执行的操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句