3

カスタム アノテーション (MKAnnotation継承) があり、後に移動したいと考えていAddAnnotationます。

Coordinateプロパティはオーバーライドされていますが、KVO (のアニメーションのsetCoordinate:基になっている) は機能していないようです。

4

1 に答える 1

3

プロパティのセッターでKVOwillChangeValueとメソッドを手動で呼び出すことで解決しました。このような:didChangeValueCoordinate

    public override CLLocationCoordinate2D Coordinate 
    {
        get
        {
            var loc = UserInfo.Activity.MapLocation.Location;
            return new CLLocationCoordinate2D(loc.Latitude, loc.Longitude);
        }

        set
        {
            WillChangeValue("coordinate");

            //Save value here to some backing store
            //e.g. _coordinate = value

            DidChangeValue("coordinate");
        }
    }

次のようにアニメーション化します。

UIView.AnimateNotify(1.0, () => {
    myAnnotation.Coordinate = targetCoordinates;
}, finished => {

});

また、複数の注釈を追加すると、そのうちの1つが左上隅から移動するという問題もありました。バックグラウンドスレッドで上記のアニメーションコードをラップすることで解決しました:

System.Threading.ThreadPool.QueueUserWorkItem(state => {
   InvokeOnMainThread(() => {
       UIView.AnimateNotify(1.0, () => {
           myAnnotation.Coordinate = targetCoordinates;
           secondAnnotation.Coordinate = secondCoordinates;
       }, finished => {

       });
   });
});

少しハックですが、機能します。AddAnnotations戻る機会を呼び出すメソッドを提供し、座標を更新します。おそらくアニメーションの遅延でも同じことができますが、私にはうまくいきませんでした.

于 2013-10-31T13:09:39.717 に答える