2012-11-21 3 views
8

Der Ursprung des normalen Anmerkungsstifts liegt in der Mitte des unteren , also zeigt der Stift immer auf den gleichen Platz.Ändern Sie den Bildursprung der Kartenanmerkungsansicht?

Aber wenn ich mein benutzerdefiniertes Bild hinzufüge, ist der Ursprung der Mittelpunkt des Bildes, so dass jeder Zoom in oder out, die Unterseite meines Bildes auf einen anderen Ort zeigen.

enter image description here

Hier ist mein Stift zum Zentrum von Paris zeigen soll BUT

enter image description here

aber wenn ich die Ansicht vergrößern, wird die Unterseite meines Pin zeigt nicht auf das Zentrum Paris.

Ich versuche mit der CGRect.origin aber nichts nützliches bekommen.

Hier ist mein Code:

- (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

wenn Sie etwas Code hochladen könnten ?? –

+0

gerade gepostet, sorry – AMTourky

+1

Welche Koordinaten (lat/lang) ist die Annotation genau? Versuchen Sie, 'customPinView.centerOffset' einzustellen, um den Bildversatz anzupassen (aber ich würde zuerst die Koordinaten überprüfen). Außerdem sollten Sie initWithAnnotation statt nur init für MKAnnotationView verwenden. – Anna

Antwort

13

MKAnnotationView hat eine centerOffset Eigenschaft, die Sie versetzt das Bild einzustellen versuchen Einstellung kann:

customPinView.centerOffset = CGPointMake(xOffset,yOffset); 


Unrelated, aber Sie sollten initWithAnnotation stattdessen von nur init zum Erstellen einer MKAnnotationView.
Es würde auch nicht schaden, dequeueReusableAnnotationViewWithIdentifier zu verwenden und Annotation-View-Wiederverwendung zu implementieren, um die Leistung zu verbessern.

Ich würde auch vorschlagen, nicht programmgesteuert die Größe des Bildes in der Delegate-Methode ändern und stattdessen mit einem bereits skalierten Bild zu beginnen. Dann können Sie einfach customPinView.image = [UIImage imageNamed:@"resizedWaterPin.png"]; tun, ohne die Größe der Annotationsbilder jedes Mal neu berechnen zu müssen.

+0

was ist mit dem Ziehen ?! Ich setze es ziehbar = JA, aber nicht die ganze Ansicht, ich muss an einigen genauen Stellen klicken, um es zu ziehen. Ich möchte, dass es dorthin gezogen wird, wo ich es berühre. – AMTourky

+1

Stellen Sie sicher, dass Ihre Annotation-Klasse setCoordinate implementiert, andernfalls kann sie nicht gezogen werden, selbst wenn ziehbar JA ist. Siehe http://stackoverflow.com/questions/11927692/ios-mkmapview-draggable-annotations und [die Dokumentation] (http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotingMaps /AnnotingMaps.html#//apple_ref/doc/uid/TP40009497-CH6-SW22). – Anna

+0

es ist schleifen, ja, ich habe die erforderlichen Methoden implementiert, aber die PIN selbst, ich muss sie von bestimmten Standorten berühren, nicht wo der Pin – AMTourky

Verwandte Themen