30

アップデート#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];
    }
}
4

3 に答える 3

33

カスタムコールアウト

CalloutMapAnnotationViewに基づいてプロジェクトを作成し、IBベースのソリューションを示しました。矢印キーは、位置注釈とそのコールアウト注釈の動きをアニメーション化します。コールアウトも、提供されたcontentViewに基づいて自動的にサイズ変更され、ビューは別のペン先から読み込まれます。幸運を!

https://github.com/jacobjennings/JJMapCallout

于 2011-09-09T15:19:05.890 に答える
2

私はあなたがこの答えを気に入らないことを知っています、しかしそれは働きます。リンクしたサンプルは、可能な限り最も難しい方法(drawRect:)を使用してオーバーレイにカスタム画像を描画するだけです。オーバーレイを一度UIImageにレンダリングimageし、非常に単純なMKAnnotationViewにプロパティを設定することを検討しましたか?バーの友達数を更新するなど、定期的にコンテンツを変更する必要がある場合でも、変更が発生したときに画像を再描画して、適切なMKAnnotationViewを更新できます。

于 2011-06-26T00:34:11.843 に答える
2

コードを確認します。新しいカスタムMKAnnotationViewを作成し、両方のビュー(ピンとコールアウト)をカプセル化することをお勧めします。

しかし、現在のコードについては、承認された応答を読むことを検討してください:MKMapViewは注釈を自動的に移動します-それらをアニメートしますか?

乾杯。

于 2011-11-13T23:28:10.027 に答える