カスタム アノテーション (MKAnnotation継承) があり、後に移動したいと考えていAddAnnotationます。
Coordinateプロパティはオーバーライドされていますが、KVO (のアニメーションのsetCoordinate:基になっている) は機能していないようです。
カスタム アノテーション (MKAnnotation継承) があり、後に移動したいと考えていAddAnnotationます。
Coordinateプロパティはオーバーライドされていますが、KVO (のアニメーションのsetCoordinate:基になっている) は機能していないようです。
プロパティのセッターで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戻る機会を呼び出すメソッドを提供し、座標を更新します。おそらくアニメーションの遅延でも同じことができますが、私にはうまくいきませんでした.