gpt4 book ai didi

ios - 绘制到 CGContext 时如何设置 UIBezierPath 的线宽?

转载 作者:行者123 更新时间:2023-11-28 10:37:02 25 4
gpt4 key购买 nike

我正在尝试使用提供的 UIBezierPath 创建一个 UIImage。不幸的是,无论我将 setLineWidth 设置为什么,结果始终是 1 点的笔画:

extension UIBezierPath {
func image(fillColor: UIColor, strokeColor: UIColor) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(bounds.size, false, 1.0)
guard let context = UIGraphicsGetCurrentContext() else {
return nil
}

context.setLineWidth(10)
context.setFillColor(fillColor.cgColor)
context.setStrokeColor(strokeColor.cgColor)

self.fill()
self.stroke()

let image = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

return image
}
}

在带有圆圈的测试项目中进行尝试,例如:

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

let imageView = UIImageView()
imageView.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
view.addSubview(imageView)

let bezierPath = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 100, height: 100))

let image = bezierPath.image(fillColor: UIColor.blue, strokeColor: UIColor.red)

imageView.image = image
}
}

无论我将 setLineWidth 设置为什么,它总是显示为 1 点。

enter image description here

最佳答案

您正在 UIBezierPath 上调用 stroke,因此您需要使用 self.lineWidth = 设置它的 lineWidth 属性10

extension UIBezierPath {
func image(fillColor: UIColor, strokeColor: UIColor) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(bounds.size, false, 1.0)
guard let context = UIGraphicsGetCurrentContext() else {
return nil
}

context.setFillColor(fillColor.cgColor)
self.lineWidth = 10
context.setStrokeColor(strokeColor.cgColor)

self.fill()
self.stroke()

let image = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

return image
}
}

关于ios - 绘制到 CGContext 时如何设置 UIBezierPath 的线宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53087960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com