Стиль соединения линий UIBezierPath некорректно работает с отрезками, которые соединяются в чрезвычайно острых углах - PullRequest
0 голосов
/ 27 февраля 2019

Я установил для UIBezierPath linejoinstyle значение .round, что прекрасно работает, за исключением случаев, когда 1 сегмент линии возвращается точно над предыдущим сегментом линии или угол между сегментами очень мал, образуя острый угол, как показано на рисунке ниже

Код инициализации пути:

    let path = UIBezierPath() // White path
    let testPath = UIBezierPath() // Inner red path       

    // Setup initial path
    self.path.lineWidth = 8
    self.path.lineJoinStyle = .round
    self.path.lineCapStyle = .round

    // Setup inner red path
    self.testPath.lineWidth = 1
    self.testPath.lineJoinStyle = .round
    self.testPath.lineCapStyle = .round

Переопределенная функция рисования вида:

override func draw(_ rect: CGRect) {

    self.color.setStroke()
    self.path.stroke()

    self.testColor.setStroke()
    self.testPath.stroke()
}

Я реализую конструкциюпуть в перестановках touchesBegan, touchesMoved и touchesEnded, так как это инструмент рисования, который я создаю - я использую метод addQuadCurve для добавления точек к пути и НЕ устанавливаю никаких других свойств пути в методах прикосновений.

enter image description here

Соединение линий, кажется, обрезается, когда я рисую острый набросок, как показано выше.Теперь, согласно этому сообщению Stackoverflow , такое поведение могло быть ошибкой, которая была устранена в iOS 7 (но для iPad SDK согласно отчету об ошибках пользователя в Apple).

Мой вопрос: Я использую iOS SDK 12.1, так что, по какой-то причине, эта ошибка снова появляется, или я что-то упустил?Потому что это происходит только тогда, когда угол между двумя отрезками линии практически ничтожно мал.Я также отправил отчет об ошибке в Apple и на OpenRadar на всякий случай.

...