MKMapView -> Anzeige eine Taste für meine Lage
-
20-09-2019 - |
Frage
Ich habe eine MKMapView
mit diesen Zeilen Quellcode implementiert (meine Position ist eine blaue Kugel, die andere sind sind lila Pins):
- (MKAnnotationView *)mapView:(MKMapView *)mapViewLocal viewForAnnotation:(id <MKAnnotation>)annotation {
if (annotation == mapViewLocal.userLocation) {
mapViewLocal.userLocation.title = @"Test";
[mapViewLocal setRegion:MKCoordinateRegionMakeWithDistance(mapViewLocal.userLocation.coordinate, 1000, 1000) animated:YES];
return nil;
}
MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapViewLocal dequeueReusableAnnotationViewWithIdentifier:@"Pin"];
if(pinView == nil) {
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"] autorelease];
pinView.pinColor = MKPinAnnotationColorPurple;
pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
pinView.animatesDrop = NO;
pinView.canShowCallout = YES;
} else {
pinView.annotation = annotation;
}
return pinView;
}
Die lila Stifte haben eine Detail Offenlegung Taste, aber meine Anmerkung keinen hat. Wie kann ich eine solche Taste?
Und das ist die Methode, wo ich tun kann, einen Knopf somethin pressd ist:
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
Wie kann ich zwischen meinen Standort und allen anderen eigenen unterscheiden, weil ich eine andere Behandlung benötigen. Gibt es eine andere delegieren, oder muss ich auf eine Art, wenn Klausel machen?
Lösung
in Ihrem didUpdateToLocation
Schreib etwas wie
AddressAnnotation *myAnnotation = [[AddressAnnotation alloc] initWithCoordinate:currentLocation];
myAnnotation.title = @"You are here";
[self.mapView addAnnotation:myAnnotation];
Und dann
Something Like
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
// try to dequeue an existing pin view first
static NSString* annotationIdentifier = @"annotationIdentifier";
NSString *titlestr = annotation.title;
MKPinAnnotationView* pinView = (MKPinAnnotationView *)
[mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:nil] autorelease];
if (!pinView)
{
// if an existing pin view was not available, create one
// MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc]
//initWithAnnotation:annotation reuseIdentifier:annotationIdentifier] autorelease];
if([titlestr isEqualToString:@"You are here"])
{
customPinView.pinColor = MKPinAnnotationColorGreen;
NSLog(@"customPinView.pinColor = MKPinAnnotationColorGreen;");
}
else{
customPinView.pinColor = MKPinAnnotationColorPurple;
customPinView.selected = TRUE;
NSLog(@"customPinView.pinColor = MKPinAnnotationColorPurple;");
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(ShowStoreDetail:)
forControlEvents:UIControlEventTouchUpInside];
customPinView.rightCalloutAccessoryView = rightButton;
}
customPinView.animatesDrop = YES;
customPinView.canShowCallout = YES;
return customPinView;
}
else
{
pinView.annotation = annotation;
if([titlestr isEqualToString:@"You are here"])
{
customPinView.pinColor = MKPinAnnotationColorPurple;
NSLog(@"customPinView.pinColor = MKPinAnnotationColorGreen;");
}
else{
customPinView.pinColor = MKPinAnnotationColorPurple;
customPinView.selected = TRUE;
NSLog(@"customPinView.pinColor = MKPinAnnotationColorPurple;");
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(ShowStoreDetail:)
forControlEvents:UIControlEventTouchUpInside];
customPinView.rightCalloutAccessoryView = rightButton;
}
}
return pinView;
return nil;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow