Anotación de MapKit de iOS, que no muestra la location correcta

Utilizo una image personalizada para mi anotación de mapkit. Pero el principal problema que me parece que me encuentro en el uso de una image personalizada, es que cuando se networkinguce el zoom, la anotación no está en el punto correcto del map, y SOLO hasta que acerque completamente hacia abajo, mostrará el punto de anotación en el lugar correcto. Parece que cuando uso un pin regular MKPinAnnotationView , funciona normalmente, ya que con el pin en el lugar correcto acercado o alejado, gracias de antemano por cualquier persona que pueda ayudar.

El código que he usado es el siguiente:

- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id <MKAnnotation>)annotation { NSLog(@"welcome into the map view annotation"); if ([annotation isKindOfClass:[MKUserLocation class]]) return nil; MKAnnotationView *pprMapNote = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pprMapNote"]; pprMapNote.image = [UIImage imageNamed:[NSString stringWithFormat:@"GPS_note.png"]]; pprMapNote.canShowCallout = YES; pprMapNote.centerOffset = CGPointMake(-21,-60); pprMapNote.calloutOffset = CGPointMake(0, 0); //[pprMapNote addSubview:pprMapNoteImg]; UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; [rightButton addTarget:self action:@selector(showDetail) forControlEvents:UIControlEventTouchUpInside]; pprMapNote.rightCalloutAccessoryView = rightButton; //remember to write in conditional for the different icons that should be loaded based on location UIImageView *pprNoteLocIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"loc_icon_casino.png"]]; pprMapNote.leftCalloutAccessoryView = pprNoteLocIcon; [pprNoteLocIcon release]; return pprMapNote; } 

Está configurando el centerOffset de la vista de anotación.

Tenga en count que este desplazamiento no se escala con el nivel de zoom. Cuanto más aleje, más lejos aparecerá la image de la coorderada.

En el MKPinAnnotationView pnetworkingeterminado, el centerOffset se deja en el valor pnetworkingeterminado de 0,0 y la image del pin está diseñada de manera que el punto inferior del pin se encuentre en la coorderada. Así que a medida que avanzas más lejos, la image del pin parece crecer en relación con el map debajo, pero la parte inferior del pin sigue apuntando a la coorderada.

Necesita ajustar el centerOffset function de su image o modificar su image para que no necesite configurar centerOffset . O simplemente intente comentar la configuration de centerOffset posible que no la necesite.

Algunos otros elementos no relacionados:

  • Tiene una pérdida de memory para el pprMapNote alloc + init (agregue una autorización automática)
  • Debería estar utilizando dequeueReusableAnnotationViewWithIdentifier para permitir la reutilización de la vista de anotación.
  • En lugar de usar addTarget para llamar a su propio método para presionar el button de llamada, es mucho mejor usar el método de delegado propio de la vista de map calloutAccessoryControlTapped

Vea esta respuesta para ver un ejemplo de los tres puntos anteriores.

El Pin se dibuja en una vista separada, por lo que no se ampliará según el estado de su vista.

Tienes que configurar manualmente el tamaño de tu image Pin personalizada. Esto se puede hacer fácilmente con el centroOffset. En la mayoría de los casos, basta con establecer la altura del marco a la mitad del tamaño de la image. La image está completamente llena en el marco, por lo que puede usar fácilmente este tamaño de marco (alto).

  aView.image = [UIImage imageNamed ... ]; aView.centerOffset = CGPointMake(0,-aView.frame.size.height*0.5);