Как установить ширину линии UIBezierPath при рисовании в CGContext? - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь создать UIImage, используя предоставленный UIBezierPath. К сожалению, независимо от того, что я установил для 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

1 Ответ

0 голосов
/ 31 октября 2018

Вы звоните stroke на UIBezierPath, поэтому вам нужно установить свойство lineWidth для этого, используя self.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
    }
}
...