5

MKMap一連の がありMKAnnotationsますが、すべて赤で問題ありません。IBで「ユーザーの場所を表示」を選択しMKAnnotation、赤から青に変更するには、viewForAnnotationメソッドにコードがあります:

if (annotation == theMap.userLocation)
    return nil;

すべて問題なく、アプリは正常に動作しますが、ユーザーが誤って青いユーザー位置ドットをタップすると、次のクラッシュが発生します。

2012-02-01 20:43:47.527 AusReefNSW[27178:11603] -[MKUserLocationView setPinColor:]: unrecognized selector sent to instance 0x79b0720
2012-02-01 20:43:47.528 AusReefNSW[27178:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKUserLocationView setPinColor:]: unrecognized selector sent to instance 0x79b0720'
*** First throw call stack:

上記のコードを削除すると、すべて正常に動作しますが、ピンは赤です。私は青いアイコンを持っていることを好みますが、まだクラッシュの理由を発見していません. どんなアイデアでも大歓迎です。ありがとう。

解決しました!Marvin に感謝します。誰かが役に立つと思った場合に備えて、コードをここに示します。簡単に言うと、まず MKAnnotation が MyAnnotation クラスのものか、MKUserLocation クラスのものかを確認する必要がありました。

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view
{
 theAnnotationSelected = [[mapView selectedAnnotations] objectAtIndex:0];
if ([theAnnotationSelected isKindOfClass:[MyAnnotation class]] ) 
{
view.pinColor = MKPinAnnotationColorGreen;

}
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKPinAnnotationView *)view
{
if ([theAnnotationSelected isKindOfClass:[MyAnnotation class]] ) 
{
view.pinColor = MKPinAnnotationColorRed;
}
4

4 に答える 4

24

現在のユーザーの場所については、MKMapViewプロパティに移動し、XIBのユーザーの場所を表示で選択します。

次に、コントローラーにMKMapViewDelegateを実装し、このメソッドをコントローラーに記述します。

-(MKAnnotationView *)mapView:(MKMapView *)pmapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;  //return nil to use default blue dot view

    if([annotation isKindOfClass:[MKAnnotationClass class]])
    {
        //Your code
    }
}

この

- (void)mapView:(MKMapView *)mapView1 didSelectAnnotationView:(MKAnnotationView *)customAnnotationView
{

    if(![annotation isKindOfClass:[MKUserLocation class]])
    {
          //Your code
    }

}

これを使用すると、ユーザーの場所に青い点が表示されます。

于 2012-02-01T09:55:39.050 に答える
9

で注釈のクラスを確認する必要があります

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{

次に、次の操作を行います..

id *annotation = view.annotation;
    if (![annotation isKindOfClass:[MKUserLocation class]]) {
//Normal Code here
}
于 2012-02-01T09:49:29.077 に答える
1

このソリューションは iOS7 で機能し、コールアウト ビューを抑制しますが、ユーザーが青い点を選択するのを止めることはできません。 マップ ビューで「現在の場所」吹き出しを非表示にする方法

現在の場所のドットの選択を無効にする方法をまだ見つけていません。

「それに対処する方法」というほどの回避策ではありませんが、タップすると特定のタイプの注釈に焦点を合わせるためにマップをズームインします。ユーザーがたまたまその上にいる場合、ズームによって青い点と注釈の間にある程度の距離が置かれ、タップしやすくなります。

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {

if([view.annotation isKindOfClass:[SpecialClass class]]){

    SpecialClass *cluster = (SpecialClass *)view.annotation;
    if(testCriteria){
        [self.mapView setRegion:MKCoordinateRegionMakeWithDistance(cluster.coordinate, cluster.radius, cluster.radius) animated:YES];
    }
}
于 2014-02-01T18:30:44.687 に答える
1

ユーザーが MKUserlocation の「青い点」をタップすると、アプリケーションがクラッシュするという同じ問題がありました。Ching-Lan 'digdog' HUANG による DDAnnotation を使用しています。私が見つけた修正は

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
id annotation = view.annotation;
    if (![annotation isKindOfClass:[MKUserLocation class]]) {
//Your Annotation Code here
}
}
于 2015-10-07T20:58:09.823 に答える