アップデート#5それは賞金稼ぎの時間だと思います。私が投稿したコードサンプルを使用しても、100回以上のビューがあり、誰も刺されませんでした。いくつかの評判ポイントはどうですか!
アップデート#4これはかなり複雑な質問なので、ここで問題が発生しているアプリの部分だけを含む新しいタブベースのプロジェクトを作成しました。http://www.servinitup.net/CustomCalloutAnnotation.zipからダウンロードできます。 自由に開いて(携帯電話で実行するには独自のバンドル識別子を追加する必要があります)、いろいろ試してみてください。そのとんでもないコールアウトアノテーションをピンと一緒に動かすことができます!
アップデート#3 setAnnotationをチュートリアルのCalloutMapAnnotationViewのパブリックメソッドにして、それを直接呼び出してみました。運がなかった。少し奇妙なことが起こったにもかかわらず、動いたのは、コールアウトの小さな三角形の部分だけでした。コールアウト全体を動かすことができませんでした。
アップデート#2まだそれほど運はありませんが、プログラムで「ピンチしてズーム」を作成し、すぐに元に戻す方法を探しているので、ユーザーには変更が表示されません。これをプログラムで実行すると、手動で実行するのと同じ効果があり、コールアウトアノテーションがその親にポップバックすることを期待しています。何か案は?
更新#1ここで遊んだ後、次のようになりました。-置き換えself.calloutAnnotation.coordinate = coords;
-self.calloutAnnotation.latitude = coords.latitude;self.calloutAnnotation.longitude = coords.longitude;
これを変更して、ピンを更新した後で地図を少しピンチしてズームインまたはズームアウトすると、コールアウトアノテーションが正しい位置にアニメーション化されます。ピン。
したがって、ユーザーが実際にピンチしてズームすることなく、これを実現する方法を理解する必要があります。
元の投稿
私は他のSOユーザーと一緒に、この素晴らしいソリューションを使用してカスタムコールアウトアノテーションを作成しています:http: //blog.asolutions.com/2010/09/building-custom-map-annotation-callouts-part-1/
標準のコールアウト(annotationview.canShowCallout = true)を使用し、場所が更新されるとピンが画面上を移動すると、標準のコールアウトはピンと一緒にロックされているかのように追跡します。
上記のカスタムコールアウトソリューションを使用している場合、位置の更新後にピンが移動すると、コールアウトアノテーションは元の位置に留まります。もちろん、iOS標準を模倣し、ピンと一緒にカスタムコールアウトアノテーショントラックを作成したいと思います。
これが私がこれまでに持っているコードです。これはアノテーションビューを正常に移動しますが、カスタムコールアウトアノテーションビューは移動しません。
/ *コアロケーションは通知をブロードキャストし、ビューコントローラはその通知をリッスンしてlocationManagerDidFindLocationを呼び出します* / -(void)locationManagerDidFindLocation:(NSNotification *)notif { CLLocation * location = [notif.userInfo objectForKey:@ "location"]; CLLocationCoordinate2D coords=[ロケーション座標]; MKCoordinateSpanスパン=MKCoordinateSpanMake((5/69)、(5/69)); MKCoordinateRegionリージョン={座標、スパン}; //現在の場所がまだない場合は、場所を作成して地図上に配置し、地図の地域を調整します //それ以外の場合は、スムーズなアニメーションで注釈の配置とマップの位置を更新します if(self.currentLocationAnnotation == nil){ self.currentLocationAnnotation = [[CurrentLocationAnnotation alloc] initWithCoordinate:coords andTitle:@ "My Title" andSubtitle:@ "Mysubtitle"]; [self.mapView addAnnotation:self.currentLocationAnnotation]; [self.mapView setRegion:regionアニメーション:true]; [self.mapView regionThatFits:region]; } そうしないと { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.45]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //これにより注釈ビューが完全に移動します self.currentLocationAnnotation.coordinate = coords; //*******これが私の問題です //*******このカスタムコールアウトアノテーションビューはそのままです // *******元の場所にありますが、 //*******親の注釈ビューが画面上を移動しています self.calloutAnnotation.coordinate = coords; [self.mapView setRegion:regionアニメーション:true]; [self.mapView regionThatFits:region]; [UIView commitAnimations]; } }