17

現在、マップビューに注釈を入力し、ユーザーの現在の場所も表示しています。viewForAnnotationメソッドを使用すると、デフォルトの赤いピンですべての注釈をオーバーライドしますが、他の注釈のビューを返したいのですが、ユーザーの場所はデフォルトの青いビーコンのままにしておきます。これを簡単に行う方法はありますか、それとも新しい注釈ビューを作成して、注釈に応じて正しいビューを返す必要がありますか?

今私は次のようなものを持っています:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if (annotation.coordinate == locationManager.location.coordinate) {

return nil;

    }else {

    MKAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Beacon"];

    // Button
    UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    button.frame = CGRectMake(0, 0, 23, 23);
    annotationView.rightCalloutAccessoryView = button;


    annotationView.canShowCallout = YES;

    return annotationView;
}
}

しかし、アノテーション引数から座標プロパティを取得できないため、2つを同一視することはできません。

誰かがこれに対する解決策を知っていますか?

4

2 に答える 2

30

ここでドキュメントをチェックしてください:

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html

それが述べているように:

注釈パラメーターのオブジェクトが MKUserLocationクラスのインスタンスである場合、ユーザーの場所を示すカスタム ビューを提供できます。デフォルトのシステム ビューを使用してユーザーの位置を表示するには、nil を返します。

したがって、これを確認する条件を追加できます。

if([annotation isKindOfClass: [MKUserLocation class]]) {
  return nil;
}
于 2012-08-01T20:49:58.753 に答える