2014-12-16 3 views
2

Так что я пытаюсь повторить следующий сценарий (полупрозрачные просмотры аннотаций):Как добавить пользовательскую прозрачную MKnnotation в MKMapView?

enter image description here

И я безуспешно пытался следующие реализации:

1- Создание пользовательского образа с 30% непрозрачности и добавление на карту ---> Результат: Изображение остается непрозрачным.

Код:

-(id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{ 

self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]; 
if (self) { 

    LLAnnotation *myA = (LLAnnotation*) annotation; 

    self.accessibilityLabel = myA.title; 
    self.annotation = myA; 
    self.enabled = YES; 
    self.canShowCallout = YES; 

    self.centerOffset = CGPointMake(5,-10); 

    self.backgroundColor = [UIColor yellowColor]; 

    self.image = [UIImage imageNamed:@"circle"]; 
} 

return self; 

} `

А затем добавить его в - (MKAnnotationView *) MapView: (MKMapView *) MapView viewForAnnotation: (ID) annotation_

2- Добавление подуровня в AnnotationView и его очистка ---> Результат: не отображается аннотация.

Код:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation_ 
{ 

    if (annotation_ == mapView.userLocation) return nil; 

    MKAnnotationView *m = [[MKAnnotationView alloc] initWithAnnotation:annotation_ reuseIdentifier:@"default"]; 

// m.backgroundColor = [UIColor clearColor]; 

    CALayer *layer = [[CALayer alloc]init]; 

    layer.frame = m.frame; 

    layer.backgroundColor = [UIColor lightGreenColor].CGColor; 

    [m.layer addSublayer:layer]; 

    m.layer.cornerRadius = m.frame.size.width/2; 
    m.layer.borderWidth = 2; 
    m.layer.masksToBounds = YES; 

    return m; 
} 

Я думал, что добавление MKOverlays поверх аннотаций может быть обходной путь, но он не должен быть путь я считаю.

Есть ли у кого-нибудь другие предложения о том, как реализовать это?

ответ

5

Создать UIImageView объект и сделать это выглядит как изображение, которое вы обязательно.

Добавить как подзаголовок аннотацииView в viewForAnnotation Метод делегата сделает трюк.

Также вам необходимо установить смещение по центру для изображения аннотаций, чтобы аннотировать рендеринг в точности правильное положение местоположения.

Have смотреть ниже код:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation_ 
{ 

    if (annotation_ == mapView.userLocation) return nil; 

    MKAnnotationView *m = [[MKAnnotationView alloc] initWithAnnotation:annotation_ reuseIdentifier:@"default"]; 

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(m.center.x, m.center.y, 20, 20)]; 
    [imageView setBackgroundColor:[UIColor colorWithRed:0.7294 green:0.7843 blue:0.1921 alpha:1.0]]; 

    imageView.layer.cornerRadius = imageView.frame.size.width/2; 
    imageView.alpha = 0.6f; 
    [m addSubview:imageView]; 

    // Also set center offset for annotation 
    [m setCenterOffset:CGPointMake(-10, -20)]; 

    return m; 
} 

enter image description here

+1

Ты мужчина @ Капай, спасибо тебе большое! – jonypz

0

Что бы я сделал, это создать изображение в Photoshop, имеющее прозрачный фон, а затем добавить желаемый желтый круг сверху. Затем сделайте непрозрачность этого круга тем, что вам нужно. Сохраните изображение как PNG.

Как только вы сохранили изображение, добавьте его в проект Xcode. После того, как вы добавили его, добавьте следующую строку под своим viewForAnnotation.

annotationView.image = [UIImage imageNamed:@"ThisIsThePNGImagesName.png"]; 

Надежда, что помогает :)

+0

Это именно то, что я сделал в первом варианте осуществления (проверка выше) - и это не сработало. – jonypz

+0

Ну, это то, что я сделал в прошлом, и у меня не было никаких проблем .. –