2012-11-21 10 views
8

L'origine del pin di annotazione regolare si trova nel mezzo del fondo , quindi il pin punta sempre nello stesso punto.Modifica l'origine dell'immagine della vista annotazione mappa?

Ma quando aggiungo la mia immagine personalizzata, la sua origine è il centro dell'immagine, quindi ogni ingrandimento o riduzione, la parte inferiore della mia immagine punta a un altro punto.

enter image description here

Qui il mio pin è supposto per puntare al centro di Parigi, ma

enter image description here

ma quando lo zoom avanti, il fondo del mio pin non punta al centro di Parigi.

Sto provando con lo CGRect.origin ma non ho trovato nulla di utile.

Ecco il mio codice:

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    MKAnnotationView * customPinView = [[MKAnnotationView alloc] init]; 
    UIImage * img = [UIImage imageNamed:@"waterPin.png"] ; 
    CGRect resizeRect; 
    resizeRect.size.height = 40; 
    resizeRect.size.width = 40; 
    resizeRect.origin = (CGPoint){0.0f, 0.0f}; 
    UIGraphicsBeginImageContext(resizeRect.size); 
    [img drawInRect:resizeRect]; 
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    customPinView.image = resizedImage; 
    return customPinView; 
} 
+0

se potessi postare del codice ?? –

+0

appena pubblicato, mi spiace – AMTourky

+1

Quali coordinate (lat/long) è l'annotazione impostata esattamente? Prova a impostare 'customPinView.centerOffset' per regolare l'offset dell'immagine (ma prima verificherei le coordinate). Inoltre, dovresti usare initWithAnnotation invece di solo init per MKAnnotationView. – Anna

risposta

13

MKAnnotationView ha una proprietà centerOffset cui è possibile provare a impostare per regolare l'immagine di offset:

customPinView.centerOffset = CGPointMake(xOffset,yOffset); 


non collegati, ma si dovrebbe usare initWithAnnotation invece di solo init per creare un MKAnnotationView.
Inoltre, non farebbe male usare dequeueReusableAnnotationViewWithIdentifier e implementare la riutilizzazione della vista annotazione per migliorare le prestazioni.

Vorrei anche suggerire di non ridimensionare a livello di codice l'immagine nel metodo delegato e invece di utilizzare un'immagine già ridimensionata per iniziare. Quindi puoi semplicemente fare customPinView.image = [UIImage imageNamed:@"resizedWaterPin.png"]; senza dover ridimensionare le immagini di annotazione ogni volta.

+0

e il trascinamento ?! L'ho impostato trascinabile = SÌ, ma non tutta la vista, ho bisogno di fare clic in alcuni punti esatti per trascinarlo. Voglio che venga trascinato ovunque lo tocchi – AMTourky

+1

Assicurati che la tua classe di annotazione implementa setCoordinate altrimenti non può essere trascinata anche se trascinabile è SÌ. Vedi http://stackoverflow.com/questions/11927692/ios-mkmapview-draggable-annotations e [la documentazione] (http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps /AnnotatingMaps.html#//apple_ref/doc/uid/TP40009497-CH6-SW22). – Anna

+0

sta trascinando, sì ho implementato i metodi necessari, ma il pin stesso, ho bisogno di toccarli da posizioni specifiche, non tutti i punti del pin – AMTourky

Problemi correlati