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