Мне нужна мертвая простая реализация оверлея MKCircle - PullRequest
4 голосов
/ 26 августа 2011

У меня есть небольшая карта, на которую я хочу добавить оверлей MKCircle.У меня есть все координаты и радиус, так как я создаю регионы для мониторинга.Я хотел бы показать этот регион пользователю, чтобы он знал, каковы границы.

Насколько я понимаю, в интернете нет ни одного хорошего учебника, который бы дал мне просто необходимое для того, чтобы бросить круг на мою карту и все было готово.

В качестве предшественника ... Я использовал примеры Apple без удачи.Предполагается, что нужен пример для регионов, но все, что я могу сделать, это бросить булавку, без круга.Я даже скопировал их классы прямо в мой проект ... нет радости.Так что, если вы можете указать мне хороший пример или макет точно, что нужно реализовать в простом ViewController, я был бы очень признателен.

Ответы [ 2 ]

15 голосов
/ 26 августа 2011

Я думаю, почему использование примера кода не сработало: вы не подключили свой контроллер представления в качестве делегата представления карты. Первый шаг для этого - убедиться, что контроллер реализует протокол MKMapViewDelegate, например так (в заголовочном файле):

#import <MapKit/MapKit.h>

@interface MyViewController : UIViewController <MKMapViewDelegate>

Если вы настраиваете контроллер вида из XIB, перетащите Ctrl с вида карты на экземпляр контроллера и подключите его в качестве выхода delegate вида карты. Если вы настраиваете это в коде, то наберите theMapView.delegate = self; в вашем -loadView или -viewDidLoad.

Затем, в какой-то момент (например, в вашем -viewDidLoad),

[theMapView addOverlay:[MKCircle circleWithCenterCoordinate:someCoordinate radius:someRadius]];

… приведет к тому, что представление карты вызовет метод его делегата -mapView:viewForOverlay:, который можно реализовать примерно так:

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
    MKCircleView *circleView = [[MKCircleView alloc] initWithCircle:(MKCircle *)overlay];
    circleView.fillColor = [UIColor blueColor];
    return [circleView autorelease];
}
4 голосов
/ 22 октября 2011

Это

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <
MKOverlay>)overlay

для полного метода делегата, см. полный ответ для людей, полностью потерянных как я.

...