UIBezierPath содержит: метод не обнаруживает касание линии толщиной более 1 пикселя.IOS

Программируем под IOS
Ответить
Гость
 UIBezierPath содержит: метод не обнаруживает касание линии толщиной более 1 пикселя.

Сообщение Гость »


Я рисую путь шириной 10 пикселей, но когда я пытаюсь обнаружить в нем касания, UIBezierPath содержит: метод обнаруживает только касания, которые происходят на линии шириной 1 пиксель, а не на линии шириной 10 пикселей.

Код: Выделить всё

    let path = UIBezierPath()
path.move(to: start)
path.addLine(to: end)
path.usesEvenOddFillRule = true
path.lineWidth = 10
path.lineCapStyle = .round
path.stroke()
path.close()

let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = lineColor.cgColor
shapeLayer.lineWidth = path.lineWidth
Вот метод обнаружения прикосновения:

Код: Выделить всё

@objc func didTapOnView(_ recognizer: UIGestureRecognizer) {
let tapLocation:CGPoint = recognizer.location(in: self)
self.hitTest(tapLocation: CGPoint(x: tapLocation.x.rounded(), y: tapLocation.y.rounded()))
}

private func hitTest(tapLocation: CGPoint){

let path: UIBezierPath = path0

print("Touch location is: \(tapLocation)")

if path.contains(tapLocation){
print("inside")
} else{
print("outside")
}
}
I'm only getting touches that happen in exact 1 pixel line and not on 10 pixel line. If I don't do rounding, no touches get detected at all.


Источник: https://stackoverflow.com/questions/781 ... an-1-pixel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»