2016-04-01 3 views
1

Я только начал развиваться в iOS. Извините, если проблема кажется тривиальной:Mapbox iOS SDK 3.1 Как сделать заметку аннотации липкой

Загрузите несколько маркеров/аннотаций через SwiftyJSON из API и отобразите их на Mapbox MapView. При нажатии на аннотацию вызывается выноска. - Это прекрасно и просто, как ад. Проблема: Я хотел бы, чтобы центрировать MAPview на маркер/аннотирования и выноски или перемещать камеру, чтобы показать их в центре, увеличено Всякий раз, когда я использую что-то вроде этого:.

let camera = MGLMapCamera(lookingAtCenterCoordinate: annotation.coordinate, fromDistance: 1000, pitch: 0, heading: 0) 
    mapView.setCamera(camera, withDuration: 2, animationTimingFunction: CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)) 

или

mapView.setCenterCoordinate(annotation.coordinate, zoomLevel: 15, animated: true) 

Выноска остается в том же положении. То, что я хотел бы добиться, заключается в том, что оно отображается липким поверх аннотации/маркера.

Это мой полный код для этой части (здания аннотаций в viewdidload не входит:.

func mapView(mapView: MGLMapView, imageForAnnotation annotation: MGLAnnotation) -> MGLAnnotationImage? { 
    var annotationImage = mapView.dequeueReusableAnnotationImageWithIdentifier("marker_live") 

    if annotationImage == nil { 
     // Leaning Tower of Pisa by Stefan Spieler from the Noun Project 
     var image = UIImage(named: "marker_live")! 
     image = image.imageWithAlignmentRectInsets(UIEdgeInsetsMake(0, 0, image.size.height/2, 0)) 

     annotationImage = MGLAnnotationImage(image: image, reuseIdentifier: "marker_live") 
    } 

    return annotationImage 
} 


func mapView(mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool { 
    print("tap on annotation") 
    mapView.selectAnnotation(annotation, animated: true) 

    return true 
} 

func mapView(mapView: MGLMapView, calloutViewForAnnotation annotation: MGLAnnotation) -> UIView? { 

    return CustomCalloutView(representedObject: annotation) 

} 

func mapView(mapView: MGLMapView, tapOnCalloutForAnnotation annotation: MGLAnnotation) { 
    print("Tapped the callout for: \(annotation.title!)") 
    self.performSegueWithIdentifier("PlaylistFromMap", sender: annotation.title!) 
    mapView.deselectAnnotation(annotation, animated: true) 
} 

Я также думал об использовании обработчика завершения, но не понял, как это работает Помощь много оценили!

ответ

1

позицию зрения выноски в настоящее время не может быть обновлена ​​после того, как она была показана, но this is a feature мы ищем, чтобы добавить в v3.3.0.

чтобы открыть выноски после setCamera: или setCoordinate:, используйте варианты тех методов, которые включают обработчик завершения, а затем selectAnnotation:.

+0

До сих пор понял ... но как я могу обнаружить прикосновение к аннотации? Пока есть два делегата -mapView: didSelectAnnotation: и -mapView: annotationCanShowCallout: я использовал для обнаружения касания. С первым я могу вызвать движение камеры и после выбора аннотации (снова) после завершения Handler. Со вторым я мог показать выноску. Как я могу запускать камеру и выбор без фактического выбора аннотации в первую очередь? – lightwaver

+0

Вы не можете - по крайней мере, не с любым способом, предоставляемым SDK Mapbox iOS. – friedbunny

+0

Моя проблема в том, что я использую 'selectAnnotation' для запуска камеры ... так что мне нужен способ запуска камеры отдельно или выноска. Любые подсказки, что я мог бы найти? – lightwaver

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