2016-12-11 2 views
0

Je veux implémenter KCFloatingActionButton (ou quelque chose de similaire) sur une Mapbox MGLMapView mais ne peut pas faire fonctionner l'action du bouton. Le bouton reconnaît le contact initial, la couleur change, mais rien d'autre ne se passe. Je ne suis pas sûr si la carte vole des touches ou a une préséance plus élevée en quelque sorte.Comment utiliser les contrôles personnalisés sur Mapbox MGLMapView

L'inspection de la hiérarchie de vue montre que UIButton et les UIViews associés sont au-dessus de la carte, donc je suis à perte. Je pensais que cela aurait pu être l'utilisation de vues dans le bouton ainsi que l'objet UIButton réel, mais je suis capable d'attacher un gestureRecognizer à un simple UIView sur la carte sans problème (sauf la carte enregistre encore traîne et tape dans la vue). Aussi les objets UIButton vanille fonctionnent bien.

EDIT: Il suffit de permuter la vue sur MKMapView et le bouton fonctionne correctement.

Répondre

0

Ainsi, vous apprenez quelque chose de nouveau tous les jours. Je souhaite juste que c'était hier.

La vue d'ensemble contient des vues. Dans mon cas, MGLMapView contient un KCFloatingActionButton (lui-même dérivé d'un UIView). Superviews ont des reconnaisseurs de gestes attachés. Dans mon cas, mapView a les taps et balayages habituels normalement associés aux cartes. Le comportement par défaut est que ces gestes ne soient pas bloqués par des sous-vues, donc la simple présence du bouton n'empêche pas le superviseur de reconnaître son geste.

En adoptant le UIGestureRecognizerDelegate et la mise en œuvre:

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

Je peux gérer sélectivement la façon dont mon « bouton » gère les gestes découlant de la superview. Comme je l'ai lu UIButtons par défaut à ce comportement pour les robinets uniques, mais mon bouton UIView ne fonctionne pas.