1

カスタム MKOverlayPathView サブクラスとそれを確認するカスタム クラスを使用してマップ ビューに半円を追加しようとしましたが、マップ ビューに何も表示されません。UIBezierPath を使用して円のパスを作成していますが、何を試してもパスが表示されません... UIBezierPath をオーバーレイとして使用しているサンプル プログラムはありますか?

ありがとうございました!

ティム

編集:アンナの質問への回答:

MKCircleViews は問題なく描画できますが、MKOVerlay(Path)View のカスタム サブクラスに苦労しているようです。デリゲートが設定され、NSLog はオーバーレイが実際に追加されたことを確認します。View 部分だけが欠落しています...

オーバーレイ クラスのヘッダー ファイルの下。コメントと変数はオランダ語です。翻訳が必要な場合は提供できますが、すべて明確にする必要があります。中心座標と半径でオーバーレイを作成します。

boundingMapRect は中心座標から計算されます。原点は、x と y の両方の中心から半径を引いたもので、幅 + 高さは半径の 2 倍です。

@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;

ここで、PZROverlayView クラスの createPath メソッドを上書きする必要があると思いますが、そこに必要なコードがわかりません。私が試したのは、UIBezierPath を作成し、それを CGPath に変換して、MKOverlayPathView スーパー クラスのパス プロパティに割り当てることでした。

4

1 に答える 1

1

よし、ついに自分が間違っていたことを発見した!実際、思ったよりずっと簡単です!

解決:

  1. MKCircle オーバーレイを追加
  2. viewForOverlay で: bezierPath (CG または UI) を作成し、それを標準の MKOverlayPathView インスタンスのパス プロパティに追加します。

カスタムクラスを使用することで、私は自分自身でそれを難し​​くしていました...

于 2012-08-23T11:26:35.850 に答える