2015-08-17 2 views
9

В моем приложении у меня есть пользовательские аннотации, где leftCalloutAccessoryView является круговой UIView. Это отлично работает в симуляторе с этим кодом:Получить рамку аннотации на карте

let rideTimeView = UIView() 
    rideTimeView.frame = CGRectMake(5, 5, 50, 50) 
    rideTimeView.layer.cornerRadius = 25 

Проблема возникает, когда я запускаю приложение на реальных устройствах. Он отлично работает (я считаю) 6 и 6 Plus, но перекрывается внизу на 4 и 5.

Есть ли способ получить размеры аннотации?

+0

Смотрите так: http://stackoverflow.com/questions/11421732/convert-mkannotation-coordinates-to-view-coordinates Надеюсь, что это помогает – Mrunal

ответ

0

Вы можете конвертировать кадр из надтаблицы в окно:

let frame = convertRect(rideTimeView.frame, toView: UIApplication.sharedApplication().delegate!.window!) 
+0

я пытался это делать - 'пусть кадр = pinView.convertRect (pinView .frame, toView: UIApplication.sharedApplication(). delegate! .window!) '. pinView - это аннотация, для которой мне нужен кадр, но он просто возвращает (0,0,0,0). – user3746428

+0

Попробуйте использовать 'pinView.superview.convertRect'. Дайте мне знать, если это поможет. – gontovnik

+0

Не работает, к сожалению. Я должен упомянуть, что вышеуказанный код находится в 'viewForAnnotation', поэтому в этот момент pinView действительно имеет фрейм? – user3746428

1

Swift 3:

Чтобы получить кадр MKAnnotationView в MKMapView, сначала вам нужно будет ссылка на MKAnnotation. Затем сделайте:

if let annotationView = self.mapView.view(for: annotation) { 
    let frameOfAnnotationViewInMapView = annotationView.frame 
} 

Кроме того, если вы хотите рамку MKAnnotationView на экране, сделайте следующее:

let frameOfViewInSuperview = self.mapView.convert(frameOfAnnotationViewInMapView, to: self.mapView.superview?.superview?.superview?.superview?.superview?.superview?.superview?.superview?.superview?.superview?.superview?.superview?.superview?.superview?.superview) 

Количество раз, вам нужно позвонить .superview будет зависеть от того, насколько глубоко ваш MKMapView вложен. Для моего случая, он был вложен очень глубоко.

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