Iphone MapView: Pin Annotation - другой цвет - PullRequest
2 голосов
/ 16 марта 2011

Прошу совета при решении этой проблемы:

Я получаю файл XML для отображения булавок на моем MapView. В другом методе я показываю свою текущую позицию на карте:

-(void)setPOIs {

NSLog(@"insert POIs");

int x = 0;

while (x < [res count]) {

    CLLocationCoordinate2D c;
    NSString *latitude = [[res objectAtIndex:x] objectForKey:@"latitude"];
    NSString *longitude = [[res objectAtIndex:x] objectForKey:@"longitude"];
    c.latitude = [latitude doubleValue];
    c.longitude = [longitude doubleValue];
    GPSAnnotation *annotation = [[GPSAnnotation alloc] initWithCoordinate:c];
    annotation.mTitle=[[res objectAtIndex:x] objectForKey:@"ordiname"];
    annotation.currentPoint = [NSNumber numberWithInt:[[[res objectAtIndex:x] objectForKey:@"tierarztid"] intValue]];
    annotation.currentRow = [res objectAtIndex:x];
    [mapViewOutlet addAnnotation:annotation];
    [annotation release];

    NSLog(@"latitude setPOIs: %@", latitude);
    x++;
}   

[self showOwn];

}

- (void) showOwn {

CLLocationCoordinate2D c;
c.latitude = location.latitude;
c.longitude = location.longitude;
GPSAnnotation *annotation1 = [[GPSAnnotation alloc] initWithCoordinate:c];
annotation1.mTitle= @"Ihr Standort";
[mapViewOutlet addAnnotation:annotation1];
[annotation1 release];    

}

Здесь я показываю контакты:

- (MKAnnotationView *)mapView:(MKMapView *)mapViewOutlet viewForAnnotation:(GPSAnnotation *)annotation {

int postag = 0;
//int row = 0;

MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];
annView.pinColor = MKPinAnnotationColorGreen;
UIButton *myDetailButton = [UIButton buttonWithType:UIButtonTypeCustom];
myDetailButton.frame = CGRectMake(0, 0, 23, 23);
myDetailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
myDetailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;


    // Set the image for the button
[myDetailButton setImage:[UIImage imageNamed:@"button_right.png"] forState:UIControlStateNormal];
[myDetailButton addTarget:self action:@selector(showLinks:) forControlEvents:UIControlEventTouchUpInside]; 


if ([[annotation title] isEqualToString:@"Current Location"]) {
    postag = 99999;
} else {
    postag = [annotation.currentPoint intValue];

} 



myDetailButton.tag  = postag;

// Set the button as the callout view
annView.rightCalloutAccessoryView = myDetailButton;

annView.animatesDrop=NO;
annView.canShowCallout = YES;
annView.calloutOffset = CGPointMake(-5, 5);


return annView;

[annView release];

}

Что я могу сделать, чтобы отобразить пользовательское изображение для моей текущей позиции - и / или не отображать кнопку раскрытия?

Ответы [ 3 ]

1 голос
/ 17 марта 2011

спасибо за ваш отзыв! Я решил, просто адаптировав оператор if ... else

- (MKAnnotationView *)mapView:(MKMapView *)mapViewOutlet viewForAnnotation:(GPSAnnotation *)annotation {

int postag = 0;
//int row = 0;

MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];
annView.pinColor = MKPinAnnotationColorGreen;
UIButton *myDetailButton = [UIButton buttonWithType:UIButtonTypeCustom];
myDetailButton.frame = CGRectMake(0, 0, 23, 23);
myDetailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
myDetailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;


if ([[annotation title] isEqualToString:@"Ihr Standort"]) {
    postag = 99999;
    UIImage *annotationImage = [UIImage imageNamed:@"07-map-marker.png"];
    annView.image = annotationImage;
} else {
    postag = [annotation.currentPoint intValue];
    [myDetailButton setImage:[UIImage imageNamed:@"button_right.png"] forState:UIControlStateNormal];
    [myDetailButton addTarget:self action:@selector(showLinks:) forControlEvents:UIControlEventTouchUpInside]; 

} 



myDetailButton.tag  = postag;

// Set the button as the callout view
annView.rightCalloutAccessoryView = myDetailButton;

annView.animatesDrop=NO;
annView.canShowCallout = YES;
annView.calloutOffset = CGPointMake(-5, 5);


return annView;

[annView release];

}

BR

Stefan

0 голосов
/ 17 марта 2011
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[ParkingSpot class]])
    {
        static NSString* AnnotationIdentifier = @"ParkAnnotationIdentifier";
        MKAnnotationView* annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ParkAnnotationIdentifier];
        if (!annotationView)
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
            annotationView.draggable = NO;
            UIImage *annotationImage = ...your image here
            annotationView.image = annotationImage;
        }
    return annotationView;
    }
}
0 голосов
/ 17 марта 2011

Вместо использования MKPinAnnotationView используйте MKAnnotationView. MKPinAnnotationView является подклассом MKAnnotationView. MKPinAnnotationView покажет ТОЛЬКО контакты. MKAnnotationView имеет свойство изображения, которое вы можете установить для отображения другого изображения вместо булавки.

Строка кода, которая показывает кнопку раскрытия, является вашей rightCalloutAccessoryView инструкцией. Уберите это, и подробное раскрытие в выноске исчезнет.

...