Как добавить UIBezierPath в MKMapView с помощью наложений

Я пытался добавить полукруг в представление карты, используя пользовательский подкласс MKOverlayPathView и пользовательский класс, который подтверждает, но я не могу ничего отображать в представлении карты. Я использую UIBezierPath, чтобы создать путь для круга, но что бы я ни пытался, я не вижу свой путь... У кого-нибудь есть пример программы, в которой UIBezierPath используется в качестве наложения?

Спасибо!

Тим

Изменить: ответ на вопрос Анны:

Я могу рисовать MKCircleViews без каких-либо проблем, но мне кажется, что я борюсь с пользовательскими подклассами для MKOVerlay(Path)View. Делегат установлен, и NSLog подтверждает, что мой оверлей действительно добавлен, отсутствует только часть View...

Ниже файла заголовка для моего класса наложения. Комментарии и переменные на голландском языке, если кому-то нужен перевод, я могу предоставить его, но я думаю, что все должно быть понятно. Я создаю наложение с центральной координатой и радиусом.

boundingMapRect вычисляется из центральной координаты. Происхождение — это центр минус радиус как для x, так и для y, а ширина + высота в два раза больше радиуса.

@interface PZRMijnOverlay : NSObject <MKOverlay>
{

}
//een property die een bezierpath beschrijft, naar de 2 standaard overlay properties
@property (nonatomic, strong) UIBezierPath *bezierPath;
@property (nonatomic) CLLocationDistance straal;

//class method
+(PZRMijnOverlay *)bezierCirkelMetCenterCoordinate: (CLLocationCoordinate2D)coordinaat enStraal: (CLLocationDistance)eenStraal;

//een eigen designated init
-(id)initWithCenterCoordinate: (CLLocationCoordinate2D)coordinaat enStraal: (CLLocationDistance)eenStraal;

@end

Это реализация метода viewForOverlay:

PZROverlayView *overlayView = [[PZROverlayView alloc] initWithOverlay:(PZRMijnOverlay *)overlay];

overlayView.strokeColor = [UIColor redColor];
overlayView.lineWidth = 10;
//overlayView.strokeColor = [UIColor blackColor];

return overlayView;

Теперь я думаю, что мне следует перезаписать метод createPath в моем классе PZROverlayView, но я не могу понять, какой код должен туда идти. Я попытался создать UIBezierPath, преобразовать его в CGPath и назначить его свойству пути суперкласса MKOverlayPathView.


person user1615293    schedule 21.08.2012    source источник
comment
Можете ли вы опубликовать собственный код MKOverlayPathView? Если вы добавите обычный MKCircle/MKCircleView, отобразится ли это наложение? Установлен ли делегат представления карты? Верны ли координаты полукруга? Правильно ли свойство boundingMapRect?   -  person    schedule 22.08.2012
comment
Возможно, вы захотите рассмотреть следующее объяснение: stackoverflow.com/a/61573384/4260691   -  person OhadM    schedule 03.05.2020


Ответы (1)


Хорошо, я наконец нашел, что я делал неправильно! На самом деле это намного проще, чем я думал!

Решение:

  1. Добавить наложение MKCircle
  2. В viewForOverlay: создайте bezierPath (CG или UI) и добавьте его в свойство пути стандартного экземпляра MKOverlayPathView.

Я делал это слишком сложно, используя пользовательские классы...

person user1615293    schedule 23.08.2012
comment
У меня та же проблема, но я не могу заставить работать наложение MKCircle :( Не могли бы вы предоставить какой-либо код для этого ответа? - person Sarah92; 15.03.2014