#swift #uiview #touches #uievent
Вопрос:
Мой UIView уже отлично обрабатывает прикосновения одним пальцем с помощью распознавателей жестов для нажатия и панорамирования.
Тем не менее, я хотел бы, чтобы прикосновения двумя пальцами передавались родительскому виду, находящемуся за этим видом. (Родителем является WKWebView с сгенерированной на javascript картой, которую я хотел бы, чтобы пользователь мог увеличивать масштаб, даже если этот другой вид находится впереди. Это нормально работает, когда другой вид не спереди, но, конечно, когда вид спереди есть, он не проходит через прикосновения.)
Я пытался обнаружить это, используя одно из следующих действий на виде спереди, но в обоих случаях allTouches-это пустой набор (ноль касаний).:
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
if let event = event {
print("(event)")
if let touches = event.allTouches {
print("(event.allTouches)")
if touches.count > 1 {
return false
}
}
}
return super.point(inside: point, with: event)
}
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if let event = event {
print("(event)")
if let touches = event.allTouches {
print("(event.allTouches)")
if touches.count > 1 {
return nil
}
}
}
return super.hitTest(point, with: event)
}
Как я могу продолжать использовать существующие распознаватели жестов, но переходить к просмотру с помощью нескольких касаний пальцами?
Ответ №1:
Скорее обходной путь, чем реальный ответ, но вот что решило эту проблему для меня…
Вместо переднего дочернего представления, покрывающего все родительское представление прозрачным слоем, я уменьшил его, включив только небольшую область, необходимую для фактического представления информации и полей формы пользователю.
Затем я изменил жесты одним касанием, которые будут добавлены в родительское представление, а не в дочернее представление.
Таким образом, теперь ни одно из прикосновений не захватывается дочерним представлением (за исключением полей формы и кнопок).
В любом случае, это, возможно, лучший способ справиться с моей конкретной ситуацией. Так что я, вероятно, задавал неправильный вопрос (проблема X/Y!).