2016-12-11 4 views
0

Я хочу реализовать KCFloatingActionButton (или что-то подобное) на Mapbox MGLMapView, но не может заставить действие кнопки работать. Кнопка распознает начальное касание, цвет меняется, но ничего больше не происходит. Я не уверен, что карта ворует прикосновения или имеет более высокий приоритет.Как использовать настраиваемые элементы управления на Mapbox MGLMapView

Проверка иерархии представлений показывает, что UIButton и соответствующие UIViews находятся над картой, поэтому я нахожусь в убытке. Я думал, что это может быть использование представлений в кнопке, а также фактический объект UIButton, но я могу прикрепить gestureRecognizer к простому UIView на карте без проблем (кроме того, что карта все еще регистрирует перетаскивания и краны в представлении). Также ванильные объекты UIButton работают нормально.

РЕДАКТИРОВАТЬ: Только что сменил вид на MKMapView и кнопка работает нормально.

ответ

0

Итак, вы узнаете что-то новое каждый день. Просто жаль, что это было вчера.

Superview содержит подзоны. В моем случае MGLMapView содержит KCFloatingActionButton (сам вывод из UIView). В Superviews есть распознаватели жестов. В моем случае mapView имеет обычные краны и проколы, обычно связанные с картами. Поведение по умолчанию заключается в том, что эти жесты «не» блокируются подзонами, поэтому простое присутствие кнопки не останавливает супервизор от распознавания его жеста.

Приняв UIGestureRecognizerDelegate и реализации:

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
    return false 
} 

я могу выборочно обрабатывать, как моя «Кнопка» обрабатывает жесты, вытекающие из надтаблицы. Поскольку я читал, что UIButtons по умолчанию использует это поведение для одиночных кранов, но моя кнопка на основе UIView этого не делает.

Смежные вопросы