3

我有自定义注释(MKAnnotation继承者),我想在AddAnnotation.

Coordinate属性被覆盖,但 KVO(基于其动画setCoordinate:)似乎不起作用。

4

1 回答 1

3

我通过在属性设置器中手动调用 KVOwillChangeValuedidChangeValue方法来解决它。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机会返回的方法,然后更新坐标。您可能可以对动画延迟做同样的事情,但它对我不起作用。

于 2013-10-31T13:09:39.717 回答