Я пытаюсь отметить начальный вывод и конечный вывод на моей карте разными цветами. Возможно, стартовый штырь в зеленом и конечный вывод красного цвета.Раскраски на карте
Мой код ниже, читает координаты широты/долготы из основных данных и циклов вокруг размещения красного штыря для каждого объекта, найденного в основных данных.
MapPin.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@interface MapPin : NSObject <MKAnnotation>{
CLLocationCoordinate2D coordinate;
}
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
-(id)initwithCoordinates:(CLLocationCoordinate2D)location;
@end
MapPin.m
#import "MapPin.h"
@implementation MapPin
@synthesize coordinate;
-(id)initwithCoordinates:(CLLocationCoordinate2D)location
{
self = [super init];
if (self != nil) {
coordinate = location;
}
return self;
}
-(void)dealloc{
[super dealloc];
}
@end
MapViewController.m
-(void)addAnnotations
{
if (![sharedMapID isEqualToString:@""]){
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"WayPoint" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"waypoint_map_id contains[cd] %@", sharedMapID];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
// Check for errors from the FetchRequest
if (nil == results || nil != error)
NSLog(@"Error getting results : %@", error);
listArray = [results mutableCopy];
[request release];
// Loop through the array, get the coordinates and display on the map.
for (int i = 0; i < [listArray count]; i++)
{
NSString *strXCoordinate = [[listArray objectAtIndex: i] valueForKey:@"waypoint_x"];
NSString *strYCoordinate = [[listArray objectAtIndex: i] valueForKey:@"waypoint_y"];
double dblXCoordinate = [strXCoordinate doubleValue];
double dblYCoordinate = [strYCoordinate doubleValue];
CLLocationCoordinate2D coordinate = {dblYCoordinate, dblXCoordinate};
MapPin *pin = [[MapPin alloc]initwithCoordinates:coordinate];
[self.mapView addAnnotation:pin];
[pin release];
}
[listArray release];
}
}
Из того, что я прочитал и некоторые примеры, которые я нашел, когда прибегая к помощи следующего кода вызывается для каждого вывода на карте. Его не помещают зеленые контакты на моей карте. Возможно, мне нужно передать координаты этому методу и позволить ему помещать вывод на карту вместо кода выше.
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
MKPinAnnotationView *annView = nil;
annView.pinColor = MKPinAnnotationColorGreen;
annView.animatesDrop = TRUE;
annView.canShowCallout = YES;
annView.calloutOffset = CGPointMake(-5, 5);
return annView;
}
Любая помощь или толчок в правильном направлении (извините за каламбур) очень ценится.
С уважением, Стивеном
Владимир, Спасибо за ответ. Я просто немного смущен, как то, что должно быть вместо @ «SomeID». Я читаю документацию Apple для dequeueReusableAnnotationViewWithIdentifier, но все еще немного запутался. – Stephen
Вы можете использовать любую строку для этого - просто убедитесь, что вы удалили представление с тем же идентификатором, который был создан. Вы также можете использовать разные идентификаторы для создания и удаления различных видов аннотаций (например, у вас есть представления для станций метро и остановок на автобусах - вы можете создавать и деактивировать их с помощью разных идентификаторов, а затем просто устанавливать для них соответствующую аннотацию) – Vladimir