2011-10-24 4 views
2

私はMKAnnotationViewをサブクラス化することによって、カスタムアノテーションビューを作成しました。このクラスは、私のアプリにマッチするようにスキンされたカスタムコールアウト(情報ポップアップ 'バブル')ビューも作成します。MKUserLocationの青い点に使用されるMKAnnotationViewをサブクラス化する方法はありますか?

また、ユーザー位置のドットのために吹き出しの吹き出しを再描画できるようにしたいと思いますが、そのビュー上にある唯一のコントロールは、mapView:viewForAnnotation:の中で以下を使用してオーバーライドされているかどうかです方法:

if(annotation == self.mapView.userLocation) 
    { 
     return nil; 
    } 

しかし、私が本当にやりたいたいが、注釈ビューMapKitは、ユーザーの場所青い点のために使用しているものを見つける、そして私は、そのコールアウトバブルを肌することができますので、それをサブクラスである...それとも別があります方法?またはまったくまったく無意味ですか?

感謝:)

:-Joe

答えて

0

あなたは、私は、これはあなたを助けることを確認していない

if ([annotation isKindOfClass:[MKUserLocation class]]) { // or if(annotation == self.mapView.userLocation) 
    MKAnnotationView * annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"MyLocation"]; 
    if (annotationView == nil) { 
     annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MyLocation"] autorelease]; 
     annotationView.canShowCallout = NO; 
     annotationView.image = [UIImage imageNamedWithBrand:@"MyLocationPin.png"]; 
     } else { 
     annotationView.annotation = annotation; 
     } 
    return annotationView; 
} 
+0

それは画像「MyLocationPin.png」と青い点を置き換えているため、動作しないこと。 annotationViewを青いドットでサブクラス化できるようにするため、カスタムのコールアウトを追加できます。申し訳ありません。 – jowie

+0

申し訳ありませんが、私はあなたの質問をよく理解していませんでした。まあ...私はあなたの問題について考えるつもりです:) – Zoleas

+0

ありがとうございます:)私はそれをrewordすることができますかどうかがわかります...十分に明確でない場合は、それを編集して自由に感じてください! – jowie

1

使用できますが、その後、盗み、デフォルトのユーザーの場所の注釈ビューを使用することができますビューはmapView:didSelectAnnotationView:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    if (view == [mapView viewForAnnotation:mapView.userLocation]) { 
     // do what you want to 'view' 
     // ... 
    } 
    // ... 
} 

私はこのトリックを使用して吹き出しタイトルとサブタイトルを入力し、leftCalloutAccessoryViewを使用して画像を追加します。しかし、私はは完全にコールアウトを置き換えようとしていないので、可能かどうかわかりません。

+0

これは賢明な考えであり、私はそれを行ってきましたが、唯一の問題は、userLocation annotationViewを停止してコールアウトの表示を停止する方法がないように見えることです。何かご意見は? – jowie

+1

また、 'mapView:didAddAnnotationViews:'でアノテーションビューを取得する必要があります。そこでは、 'if'文で上記と同じテストを使用し、そこに' canShowCallout'を 'NO'に設定することができます。 – shawkinaw

+0

それは素晴らしい感謝です!ほぼそこに...私は、オブジェクトのクラスがMKUserLocationViewであることに気付きました。新しいバブルを描画するためにMKUserLocationViewを拡張またはサブクラス化する方法はありますか、またはビューコントローラにコードを直接ビルドする必要がありますか? – jowie

0

私はそれが直接可能ではないと思いますが、あなたはこれで、ランタイムでいくつかのメソッドをオーバーライドすることができます。http://theocacao.com/document.page/266

関連する問題