0

すべてのマップ ピン用にカスタム MKPinAnnotationView を作成しましたが、ユーザー位置ピンのカスタマイズに問題があります。カスタムピンを作成すると、青い脈動ドットが失われ、不要なピンに置き換えられます。したがって、viewForAnnotation メソッドで nil を返します。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{   
    if(annotation == self.mapView.userLocation)
    {
        // show the blue dot for user's GPS location
        return nil;
    }

    ... code for custom annotation pins goes here
}

ただし、タップするとカスタム吹き出しビューを呼び出す必要があります。青い点が選択されているときにサブビューを追加しようとしました:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{    
    if(view == [self.mapView viewForAnnotation:self.mapView.userLocation])
    {
        MKAnnotationView *userLocationView = [self.mapView viewForAnnotation:self.mapView.userLocation];

        userLocationCalloutView = [[MyAnnotationCalloutView alloc] initWithFrame:CGRectMake(-113, -58, 247, 59)];
        [userLocationCalloutView.rightAccessoryButton addTarget:self action:@selector(pinButtonTapped) forControlEvents:UIControlEventTouchDown];
        [userLocationView addSubview:userLocationCalloutView];
    }
}

しかし、これの問題は、コールアウト アクセサリ ボタンがヒット領域の外側にあり、青い点の注釈ビューが非公開であるため、hitTest:withEvent を追加できないことです... 何かアイデアはありますか?

4

1 に答える 1

2

デリゲート メソッド mapView:didAddAnnotationViews で、userLocation アノテーション用に構築された MKAnnotationView を取得できます。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    for(MKAnnotationView *view in views)
    {
        if (view.annotation == mapView.userLocation)
        {
            view.canShowCallout = YES;
            view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            break;
        }
    }
}
于 2012-08-07T23:51:28.457 に答える