2016-11-21 4 views
0

Я пытаюсь получить разные изображения в leftCalloutAccessoryView на каждом значке карты на Xcode (objetive-c). Я искал другие ответы в Интернете, но я не нашел этого (только, как изменить изображение на штыре). Но я хочу изменить изображение внутри булавки слева от названия булавки. Кто-нибудь может мне помочь? Большое спасибо.Показать другие изображения в leftCalloutAccessoryView Map Xcode

Это мой RestMapPin.h

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h> 

@interface RestMapPin : NSObject <MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 
} 

@property (nonatomic, assign) CLLocationCoordinate2D coordinate; 
@property (nonatomic, copy) NSString *title; 
@property (nonatomic, copy) NSString *subtitle; 
@property (nonatomic, copy) NSString *image; 

@end 

Это мой RestMapPin.m:

#import "RestMapPin.h" 

@implementation RestMapPin 
@synthesize coordinate, title, subtitle, image; 

@end 

Это мой MapViewController.h:

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface MapViewController : UIViewController { 
    MKMapView *mapView; 
} 

@property (weak, nonatomic) IBOutlet UIBarButtonItem *barButton; 
@property (nonatomic, retain) IBOutlet MKMapView *mapView; 
@property(nonatomic, retain) CLLocationManager *locationManager; 

@end 

Это мой MapViewController. м:

#import "MapViewController.h" 
#import "SWRevealViewController.h" 
#import "RestMapPin.h" 
#import "RestViewController.h" 

@interface MapViewController() 

@end 

@implementation MapViewController 

@synthesize mapView; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _barButton.target = self.revealViewController; 
    _barButton.action = @selector(revealToggle:); 

    [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer]; 

/*Babelia*/ 
    MKCoordinateRegion region_Babelia = { {0.0, 0.0}, {0.0, 0.0}}; 
    region_Babelia.center.latitude = 40.4234778; 
    region_Babelia.center.longitude = -3.686283000000003; 
    region_Babelia.span.longitudeDelta = 0.1f; 
    region_Babelia.span.latitudeDelta = 0.1f; 
    [mapView setRegion:region_Babelia animated:YES]; 

    RestMapPin *ann_Babelia = [[RestMapPin alloc] init]; 
    ann_Babelia.title = @"Babelia"; 
    ann_Babelia.subtitle = @"Barrio de Salamanca"; 
    ann_Babelia.coordinate = region_Babelia.center; 
    [mapView addAnnotation:ann_Babelia]; 

    /*Bacira*/ 
    MKCoordinateRegion region_Bacira = { {0.0, 0.0}, {0.0, 0.0}}; 
    region_Bacira.center.latitude = 40.43375390000001; 
    region_Bacira.center.longitude = -3.699036299999989; 
    region_Bacira.span.longitudeDelta = 0.1f; 
    region_Bacira.span.latitudeDelta = 0.1f; 
    [mapView setRegion:region_Bacira animated:YES]; 

    RestMapPin *ann_Bacira = [[RestMapPin alloc] init]; 
    ann_Bacira.title = @"Bacira"; 
    ann_Bacira.subtitle = @"Chamberí"; 
    ann_Bacira.coordinate = region_Bacira.center; 
    [mapView addAnnotation:ann_Bacira]; 
} 

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    MKAnnotationView *pinView = nil; 
    if(annotation != mapView.userLocation) { 
     static NSString *defaultPinID = @"com.invasivecode.pin"; 
     pinView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
     if (pinView == nil) 
      pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID]; 

     pinView.canShowCallout = YES; 
     pinView.image = [UIImage imageNamed:@"[email protected]"]; 
    } 
    else { 
     //[mapView.userLocation setTitle:@"I am here"]; 
    } 

    UIImageView *leftIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"[email protected]"]]; 
    pinView.leftCalloutAccessoryView = leftIconView; 
    leftIconView.layer.cornerRadius = 6; 
    leftIconView.clipsToBounds = YES; 
    leftIconView.layer.borderWidth = 1; 

    return pinView; 
} 

@end 

Я знаю, что есть что-то похожее на код в методе viewForAnnotation:

UIImageView *leftIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"[email protected]"]]; 
     pinView.leftCalloutAccessoryView = leftIconView; 

Но я не знаю, как изменить его, чтобы быть различными для каждой карты штифта («Babelia» и «Bacira»). Большое спасибо за ваши ответы!

ответ

1
@interface RestMapPin : NSObject <MKAnnotation> 
    { 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 
    NSString *pincolor; 
    } 

@property (nonatomic, assign) CLLocationCoordinate2D coordinate; 
@property (nonatomic, copy) NSString *title; 
@property (nonatomic, copy) NSString *subtitle; 
@property (nonatomic, copy) NSString *pincolor; 
@property (nonatomic, copy) NSString *image; 

Дают штырьковый значение

ann_Bacira. pincolor = @“red”; 
ann_Babelia.pincolor = “green”; 


    -(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation 
    { 
    MKAnnotationView *pinView = nil; 
    UIImage *objImage = nil; 
    if(annotation != mapView.userLocation) 
    { 
    static NSString *defaultPinID = @"com.invasivecode.pin"; 
    pinView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
    if (pinView == nil) 
     pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID]; 

    pinView.canShowCallout = YES; 
    if([annotation.pincolor isEqualToString:@"green"]) 
    { 
    objImage =[UIImage imageNamed:@“[email protected]"] 
    } 
    else if([annotation.pincolor isEqualToString:@"red"]) 
    { 
    objImage =[UIImage imageNamed:@“[email protected]"] 
    } 

    pinView.image = objImage; 
    } 
    else { 
    //[mapView.userLocation setTitle:@"I am here"]; 
    } 
    return pinView; 
    } 
+0

Он отлично работает. Большое спасибо! –