Я не могу дать MKAnnotation изображение! - PullRequest
1 голос
/ 03 февраля 2010

Эй, ребята!У меня возникли некоторые проблемы с предоставлением MKAnnotationView изображения вместо просмотра булавки.Другими словами, у меня возникают проблемы с отображением целевого изображения (target.png) вместо обычного представления булавки.Вот мой код ---


// .h file
#import  //Here it says to import mapkit & UIKit.  The code blockquote doesn't let me
#import  //show you that

@interface AddressAnnotation : NSObject {
    CLLocationCoordinate2D coordinate;

    NSString *mTitle;
    NSString *mSubTitle;
}

@end

@interface ChosenLocationMap : UIViewController {
IBOutlet MKMapView *mapView;
AddressAnnotation *addAnnotation;
}
-(CLLocationCoordinate2D) addressLocation;

// .m file
@implementation AddressAnnotation
@synthesize coordinate;

- (NSString *)subtitle{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *stitle = [prefs objectForKey:@"addressKey"];
    return @"%@",stitle;
}

- (NSString *)title{
    return @"TARGET";
}

-(id)initWithCoordinate:(CLLocationCoordinate2D) c{
    coordinate=c;
    NSLog(@"%f,%f",c.latitude,c.longitude);
    return self;
}

@end


@implementation ChosenLocationMap
@synthesize destinationLabel, startbutton, accelloop, aimview, bombblowupview, bombleftview1, bombleftview2, bombleftview3, firebutton;

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
- (void)viewDidLoad {
mapView.mapType = MKMapTypeSatellite;
MKCoordinateSpan span;
    span.latitudeDelta=0.2;
    span.longitudeDelta=0.2;
CLLocationCoordinate2D location = [self addressLocation];
region.span=span;
    region.center=location;
if(addAnnotation != nil) {
        [mapView removeAnnotation:addAnnotation];
        [addAnnotation release];
        addAnnotation = nil;
    }
addAnnotation = [[AddressAnnotation alloc] initWithCoordinate:location];
    [mapView addAnnotation:addAnnotation];
 [super viewDidLoad];
}
-(CLLocationCoordinate2D) addressLocation {
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *destinationstring = [prefs objectForKey:@"addressKey"];
    NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", 
                           [destinationstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString]];
    NSArray *listItems = [locationString componentsSeparatedByString:@","];

    double latitude = 0.0;
    double longitude = 0.0;

    if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
        latitude = [[listItems objectAtIndex:2] doubleValue];
        longitude = [[listItems objectAtIndex:3] doubleValue];
    }
    else {
        //Show error
    }
    CLLocationCoordinate2D location;
    location.latitude = latitude;
    location.longitude = longitude;

    return location;
}

- (MKAnnotationView *)map:(MKMapView *)map viewForAnnotation:(id )annotation{
    MKAnnotationView *annView;
    annView = (MKAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:annotation.title];

    if(annView == nil)
        annView = [[[MKAnnotationView alloc]
                    initWithAnnotation:annotation reuseIdentifier:annotation.title] autorelease];
    else
        annView.annotation = annotation;


    [annView setImage:[UIImage imageNamed:@"target.png"]];
    annView.canShowCallout = TRUE;

    return annView;
}

Обратите внимание, что я включил только код, который на самом деле включает в себя просмотр карты.Заранее спасибо!

РЕДАКТИРОВАТЬ: Я изменил код в своем документе XCode для изменений в ответе 1. Мне лень переносить все в блок кода выше, и все же, изображение по-прежнему не работает.

SHOOP DA EDIT: Спасибо за ответ!Мое решение состояло в том, что я забыл сказать mapView.delegate = self.Bye!

Ответы [ 3 ]

1 голос
/ 03 февраля 2010

Ничего себе такого с этим кодом: -)

Сначала вы пропускаете объявление @property в вашем AddressAnnotation

@property (nonatomic,assign) CLLocationCoordinate2D coordinate;

В методе субтитров вы делаете это:

return @"%@",stitle;

Но это Objective-C, а не Python, поэтому вы можете изменить это на:

return stitle;

Тогда ваш initWithCoordinate совершенно неверен. Вы не инициализируете супер. Это лучше:

-(id) initWithCoordinate: (CLLocationCoordinate2D) c
{
    if ((self = [super init]) != nil) {
        coordinate=c;
        NSLog(@"%f,%f",c.latitude,c.longitude);
    }
    return self;
}

Попробуйте сначала исправить это, чтобы посмотреть, поможет ли это: -)

0 голосов
/ 04 сентября 2011

Также вы AddressAnnotation не реализует протокол MKAnnotation

0 голосов
/ 05 февраля 2010

Я новичок в Objective C, но я думаю, что прототип для вашей функции делегата должен быть:

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id )annotation{
    MKAnnotationView *annView;

Имя делегата: mapView : viewForAnnotation :, а не map : viewForAnnotation:

...