8

AnnotationViewレイヤーにCABasicAnimationを追加して、マップビュー上を移動する自動車をシミュレートします。アニメーションされたAnnotationViewがマップビューをズームしている間に消えますか?

これは、アニメーションの進行中にマップビューを拡大または縮小しようとするまでうまく動作します。

マップビューをズームするとアニメーションアノテーションビューが消えてしまいました。

これは、mapviewをズームするときに、アニメーションオブジェクトに関連付けられたレイヤーが削除されたことが原因と考えられます。

ズーム時にアニメーションを止めることでこれを解決しようとしています。結果は良くありません。車は目標点に飛ぶようだ。

誰でもこれについてのアイデアはありますか?

マップビューをズームするときにアニメーションを実行する方法を知っている人は誰ですか?

+0

あなたはこの問題上の任意の進捗状況を作りましたの?私は同じ問題を経験しており、解決したいと思います。 –

+0

@Hubertアノテーションを移動するコードを投稿できますか? – Mubbashar

答えて

1

プログラムで問題を解決する方法がわかりませんが、ユーザーがズームを開始したとき、ズームが完了したときに車の位置(ポイントa)を格納すると、現在の位置と新しい位置位置(点b)を作成し、点aから点bにアニメーション化します。この方法では、車は第2の目標点に「飛び」縫い付けられません。少し上手くするには、普通のスピードの2倍のスピードで車を始動し、次にポイントBに近づくにつれて減速して通常のスピードにします。私は、これがバグのように見えなくなり、効果のように見えると思う。

+0

いいアイデアですが、実際には作業コードで答えが必要です。私は、ユーザーがMKMapViewをズームインしているときを検出する方法も知らない。 – Felix

0

だと思いますが、mapView:regionDidChangeAnimated:デリゲートメソッドを使用することができます。ユーザーがスクロール/ズームするたびに、このメソッドが呼び出されます。一度試してみてください。それはあなたを助けるかもしれません。

1

私はregionWillChangeAnimated上のすべての注釈アニメーションを終了させることによってそれを解決: -

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated 
{ 

    for (int i=0;i< [mapView.annotations count];i++) 
    { 
    id annotation = [mapView.annotations objectAtIndex:i]; 

    MKAnnotationView* annView =[mapView viewForAnnotation: annotation]; 
    if (annView != nil) 
    { 

     CALayer* layer = annView.layer; 
     [layer removeAllAnimations]; 
    } 

    } 
} 
関連する問題