我有自定义注释(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 => {
});
我还有一个问题,如果添加多个注释,其中一个会从左上角移动。我通过在后台线程中包装上面的动画代码来解决它:
System.Threading.ThreadPool.QueueUserWorkItem(state => {
InvokeOnMainThread(() => {
UIView.AnimateNotify(1.0, () => {
myAnnotation.Coordinate = targetCoordinates;
secondAnnotation.Coordinate = secondCoordinates;
}, finished => {
});
});
});
这有点hacky,但它有效。它提供了调用AddAnnotations
机会返回的方法,然后更新坐标。您可能可以对动画延迟做同样的事情,但它对我不起作用。