如何使用叠加层将UIBezierPath添加到MKMapView

时间:2012-08-21 20:54:32

标签: mkmapview overlay uibezierpath

我一直在尝试使用自定义MKOverlayPathView子类和自定义类向地图视图添加半圆,但我无法在地图视图中显示任何内容。我使用UIBezierPath为圆圈创建路径,但无论我尝试什么,我都看不到自己的路径...... 有没有人有一个示例程序,其中UIBezierPath被用作叠加?

谢谢!

编辑:回答安娜的问题:

我可以毫无问题地绘制MKCircleViews,但我似乎很难为MKOVerlay(Path)View定制子类。委托已设置,NSLog确认我的叠加层实际已添加,只有查看部分丢失...

我的overlay类的头文件下面。评论和变量都是荷兰语,如果有人想要翻译,我可以提供,但我认为一切都应该清楚。我创建了一个具有中心坐标和半径的叠加层。

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

这是de viewForOverlay方法实现:

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

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

return overlayView;

现在我想我应该覆盖我的PZROverlayView类中的createPath方法,但我无法弄清楚需要去哪些代码。我尝试的是创建一个UIBezierPath,将其转换为CGPath并将其分配给MKOverlayPathView超类的path属性。

1 个答案:

答案 0 :(得分:1)

好吧,我终于找到了我做错了什么!它实际上比我想象的容易!

解决方案:

  1. 添加MKCircle overlay
  2. 在viewForOverlay中:创建bezierPath(CG或UI)并将其添加到标准MKOverlayPathView实例的path属性
  3. 通过使用自定义类,我自己做得太难了......