2010-10-21 14 views
1

Je n'arrive pas à changer la pinColor pour une annotation dans MapKit. Quand je ne cherche pas à mettre en œuvre la Mapview: viewForAnnotation: méthode tout fonctionne (l'annotation est ajoutée) mais lorsque je tente de modifier l'affichage des annotations, les accidents du simulateur:Problème de changement de couleur de la broche iOS MapKit

Voici le code:

MapViewController.h

#import "MapViewController.h" 
#import <MapKit/MapKit.h> 
#import <CoreLocation/CoreLocation.h> 
#import "Annotation.h" 


@implementation MapViewController 

@synthesize myMapView; 

/* 
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
     // Custom initialization 
    } 
    return self; 
} 
*/ 


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    CLLocationCoordinate2D location; 
    location.longitude = 2.21; 
    location.latitude = 48.5; 
    MKCoordinateSpan span; 
    span.latitudeDelta = 1*(1 - 0); 
    span.longitudeDelta = 1*(1 - 0); 
    MKCoordinateRegion region; 
    region.span = span; 
    region.center = location; 
    [myMapView setRegion:region animated:NO]; 
    [myMapView regionThatFits:region]; 
    Annotation *someAnnotation =[[Annotation alloc] init]; 
    [myMapView addAnnotation:someAnnotation]; 
    } 



/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 


- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id<MKAnnotation>) annotation { 
    MKPinAnnotationView *customPinview = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil] autorelease]; 
    customPinview.pinColor = MKPinAnnotationColorGreen; 
    customPinview.animatesDrop = YES; 
    customPinview.canShowCallout = YES; 
    return customPinview; 
} 



- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [super dealloc]; 
} 


@end 

MapViewController.m

// 
// MapViewController.h 
// TestMap 
// 
// Created by Johan Ismael on 10/21/10. 
// Copyright 2010 __MyCompanyName__. All rights reserved. 
// 

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


@interface MapViewController : UIViewController<MKMapViewDelegate> { 

@private 

    IBOutlet MKMapView *myMapView; 

} 

@property (nonatomic, retain) IBOutlet MKMapView *myMapView; 
//- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id<MKAnnotation>) annotation; 

@end 

Merci d'avance !!!

Note: MapViewController est déclarée en tant que délégué de l'IB dans MapView

Répondre

3

Dans la méthode viewForAnnotation, la alloc est fait sur MKAnnotationView au lieu de MKPinAnnotationView. Il doit être crash avec "sélecteur non reconnu" car MKAnnotationView n'a pas de propriété pinColor. Changez l'allocation à:

MKPinAnnotationView *customPinview = [[[MKPinAnnotationView alloc] 
    initWithAnnotation:annotation reuseIdentifier:nil] autorelease]; 
+0

Merci! et désolé pour cette jolie question stupide ... :( – Johanisma

+0

J'ai utilisé votre méthode, mais mon titre et mes sous-titres ne peuvent pas être affichés ... –