2015-08-17 13 views
9

Nella mia app ho annotazioni personalizzate dove lo leftCalloutAccessoryView è una circolare UIView. Questo funziona perfettamente nel simulatore con questo codice:Ottieni il frame dell'annotazione sulla vista mappa

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

Il problema si verifica quando eseguo l'app su dispositivi reali. Funziona perfettamente (credo) 6 e 6 Plus, ma si sovrappone in fondo a 4 e 5.

C'è un modo per ottenere le dimensioni dell'annotazione?

+0

consultare questo: http://stackoverflow.com/questions/11421732/convert-mkannotation-coordinates-to-view-coordinates Speranza che aiuta – Mrunal

risposta

0

È possibile convertire fotogramma da superview alla finestra:

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

Ho provato a fare questo - 'lasciare frame = pinView.convertRect (pinView .frame, toView: UIApplication.sharedApplication(). delegate! .window!) '. pinView è l'annotazione di cui ho bisogno per il frame, ma restituisce (0,0,0,0). – user3746428

+0

Prova a usare 'pinView.superview.convertRect'. Fatemi sapere se aiuta. – gontovnik

+0

Purtroppo non ha funzionato. Dovrei menzionare che il codice sopra è all'interno di 'viewForAnnotation', quindi a quel punto pinView avrebbe effettivamente un frame? – user3746428

1

Swift 3:

Per ottenere la cornice di MKAnnotationView in MKMapView, prima è necessario un riferimento al MKAnnotation. Poi fare:

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

Inoltre, se si desidera che la cornice del MKAnnotationView sullo schermo, effettuare:

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

Il numero di volte che è necessario chiamare .superview dipenderà da quanto è profondo il tuo MKMapView è annidato. Per il mio caso, è stato annidato molto in profondità.

Problemi correlati