mapView の注釈に関して問題があります。私の要件を一目見てみましょう。
ユーザーが会議の場所を選択できるようにしたい。
2 つのオプションがあります。
1)近くのデータのリストを提供する必要があります
または
2) 好きな場所にピンをドラッグ アンド ドロップできます。
そのために、1 つのセグメントを作成しました。近くのデータの最初のインデックスと、ピンをドロップするための 2 番目のインデックス。
最初のオプション(「近く」 )の場合、売り手の場所、買い手の場所、売り手と買い手の中間点から近くのデータを取得する必要があります。そこでGoogle apiを呼び出し、緯度と経度を3回渡してデータを取得します。初めてデータを取得するときは問題ありません。私の配列はすべてのデータ (3 つの応答を含む) でいっぱいになり、ピンの色も要件に応じて変化します。
買い手 (赤) 売り手 (紫) 中間点 (緑)
ドロップ ピンをクリックすると、すべてのデータが配列から削除され、1 つのピンがマップ上にドロップされます。
今まではうまくいきました!
しかし、もう一度「近く」をクリックすると、問題が発生します。間違いなく、必要なデータが得られますが、ピンの色は維持されません。
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if ([segmentND selectedSegmentIndex]==0) {
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString* BridgeAnnotationIdentifier = @"bridgeAnnotationIdentifier";
MKPinAnnotationView* pinView = (MKPinAnnotationView *)
[myMapView dequeueReusableAnnotationViewWithIdentifier:BridgeAnnotationIdentifier];
if (!pinView)
{
MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:BridgeAnnotationIdentifier] autorelease];
switch (self.pinColor) {
case 0:
{
customPinView.pinColor = MKPinAnnotationColorPurple;
}
break;
case 1:
{
customPinView.pinColor = MKPinAnnotationColorRed;
}
break;
case 2:
{
customPinView.pinColor = MKPinAnnotationColorGreen;
}
break;
default:
break;
}
customPinView.canShowCallout = YES;
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(showDetails:)
forControlEvents:UIControlEventTouchUpInside];
customPinView.rightCalloutAccessoryView = rightButton;
return customPinView;
}
else
{
pinView.annotation = annotation;
}
return pinView;
}
else {
// Code of dragging dropping pin. It works Fine.s
}
}
もっとアイデアを得るために画像を添付しています。
解決策またはそれを実装する別の方法を教えてください。ピンの色は、売り手と買い手を区別するために必須です。