Я пытаюсь создать пользовательскую аннотацию для простого отображения карты, но контактный сигнал не отображается на карте, когда я запускаю симулятор.MKAnnotation, не отображающийся на карте
У меня есть класс MapViewAnnotation, который реализует протокол MKAnnotation, и у меня есть еще один класс MapViewController, где я программно создаю mapView и отображаю карту.
MapViewAnnotation.h:
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface MapViewAnnotation : NSObject <MKAnnotation>
@property (nonatomic, copy) NSString *title;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
-(id) initWithTitle: (NSString *) title AndCoordinate: (CLLocationCoordinate2D) coordinate;
@end
MapViewAnnotation.m:
#import "MapViewAnnotation.h"
@implementation MapViewAnnotation
@synthesize coordinate = _coordinate;
@synthesize title = _title;
-(id) initWithTitle:(NSString *)title AndCoordinate:(CLLocationCoordinate2D)coordinate{
self = [super init];
_title = title;
_coordinate = coordinate;
return self;
}
@end
MapViewController.h:
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MapViewController : UIViewController
@property (weak, nonatomic) MKMapView *mapView;
-(void) goToLocation;
@end
MapViewController.m:
#import "MapViewController.h"
#import "MapViewAnnotation.h"
#define LATITUDE 42.3889;
#define LONGITUDE -72.5278;
@interface MapViewController()
@end
@implementation MapViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView = [[MKMapView alloc] initWithFrame:self.view.frame];
[self.view addSubview:self.mapView];
[self goToLocation];
[self.mapView addAnnotations:[self createAnnotations]];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) goToLocation {
MKCoordinateRegion newRegion;
newRegion.center.latitude = LATITUDE;
newRegion.center.longitude = LONGITUDE;
newRegion.span.latitudeDelta = 0.05f;
newRegion.span.longitudeDelta = 0.05f;
self.mapView.showsPointsOfInterest = YES;
[self.mapView setRegion:newRegion animated:YES];
}
-(NSMutableArray *) createAnnotations {
NSMutableArray *annotations = [[NSMutableArray alloc] init];
NSString *path = [[NSBundle mainBundle] pathForResource:@"location" ofType:@"plist"];
NSArray *locations = [NSArray arrayWithContentsOfFile:path];
for (NSDictionary *row in locations){
NSNumber *latitude = [row objectForKey:@"latitude"];
NSNumber *longitude = [row objectForKey:@"longitude"];
NSString *title = [row objectForKey:@"title"];
CLLocationCoordinate2D coord;
coord.latitude = latitude.doubleValue;
coord.longitude = longitude.doubleValue;
MapViewAnnotation *annotation = [[MapViewAnnotation alloc] initWithTitle:title AndCoordinate:coord];
[annotations addObject: annotation];
}
return annotations;
}
@end
Я берусь через plist, где у меня есть координаты для одного места тестирования, которое я пытаюсь показать на моей карте, но вывод не отображается на карте. Опять же, я делаю это все программно, нет xib или раскадровки (хотя это не должно быть проблемой).
Я не знаю, почему аннотация не появляется. Я пробовал смотреть на стек для некоторых других ситуаций, подобных моим, но не повезло найти что-нибудь, что могло бы помочь.
спасибо.
Подтвердите, что createAnnotations фактически добавляет аннотации к массиву и ожидаемым координатам. Например. Прямо перед строкой '[annotations addObject ...' поместите 'NSLog (@" title =% @, lat =% f, long =% f ", title, coord.latitude, coord.longitude);'. Правильно ли он регистрирует все аннотации в plist и правильные координаты? Если журнал не является тем, что вы ожидали, проверьте, что «путь» действителен, что массив 'locations' не пуст и т. Д. – Anna
Да. Он выводит правильные данные. Но я понял это благодаря вам. У меня была одна из координат на 72,32, когда она должна была быть -72,32 – mufc