Fantastic! This sounds like exactly what I would like it to do! I'll test it tonight or tomorrow inside a custom SetCoordinate method. It looks like flagging the WillChangeValue and DidChangeValue key to "coordinate" are the links to the MapView's KVO I've been looking for. Might want to build this into MKAnnotation with a SetAnnotation function in the SDK itself for the future to replicate the way Apple does it. Thanks,~Chris
> Date: Thu, 15 Sep 2011 17:15:59 -0400 > Subject: Re: [MonoTouch] Bug 724 > From: [email protected] > To: [email protected] > CC: [email protected] > > Actually... it'd probably be better to put those calls in your > SetCoordinate() method that you have, since you probably don't want to > make those calls when the MKMapKit (or would it be MKAnnotationView?) > calls setCoordinate on your annotation (e.g. when a user drags&drops > your annotation view, as hinted at by the Apple docs). > > Jeff > > On Thu, Sep 15, 2011 at 4:43 PM, Jeff Stedfast <[email protected]> wrote: > > Hi Chris, > > > > I did some more looking and it turns out the solution is incredibly simple: > > > > In your MyAnnotation class, do this: > > > > public override CLLocationCoordinate2D Coordinate { > > get { return _coord; } > > set { > > this.WillChangeValue ("coordinate"); > > _coord = value; > > this.DidChangeValue ("coordinate"); > > } > > } > > > > This magically makes the MKMapView redraw your annotation without > > having to remove/add the annotation. > > > > Hope that helps! > > > > Jeff > > > > On Thu, Sep 15, 2011 at 1:06 PM, Jeff Stedfast <[email protected]> wrote: > >> Turns out people are having the EXACT same issue you are having in > >> Objective-C on StackOverflow: > >> > >> http://stackoverflow.com/questions/2256177/how-to-move-a-mkannotation-without-adding-removing-it-from-the-map > >> > >> You can use this very same trick in MonoTouch. > >> > >> Jeff > >> > >> On Thu, Sep 15, 2011 at 12:53 PM, Jeff Stedfast <[email protected]> wrote: > >>> Hi Chris, > >>> > >>> Reading the developer documentation on Apple's site for MKAnnotation, > >>> this is what it says for setCoordinate: > >>> > >>> setCoordinate: > >>> Sets the new center point of the annotation. > >>> > >>> - (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate > >>> Parameters > >>> newCoordinate > >>> The new center point for the annotation. > >>> Discussion > >>> Annotations that support dragging should implement this method to > >>> update the position of the annotation. > >>> > >>> Availability > >>> Available in iOS 4.0 and later. > >>> Declared In > >>> MKAnnotation.h > >>> > >>> > >>> Calling setCoordinate() in Objective-C will not magically make your > >>> annotation update its location on the screen. You'll have to use a > >>> similar trick as to what I suggested to make it work in Objective-C as > >>> well. > >>> > >>> To the best of my understanding, this method doesn't move the > >>> MKAnnotation on the map like you seem to believe, it gets set by the > >>> MKMapView when the user drags the annotation to another location. > >>> > >>> If I'm wrong, please provide me with some documentation explaining why > >>> I'm wrong (preferably Apple documentation) or at least an Objective-C > >>> program demonstrating it. > >>> > >>> Jeff > >>> > >>> On Thu, Sep 15, 2011 at 12:41 PM, Chris Hamblett <[email protected]> > >>> wrote: > >>>> Since the bug has been changed to resolved without actually solving the > >>>> problem, I take this as a good reason that Objective-C will always have > >>>> functions that cannot be done through MonoTouch. I guess I will be > >>>> making the switch back to xCode. > >>>> > >>>> Sent from my iPhone > >>>> > >>>> On Sep 15, 2011, at 12:19 PM, "Jeff Stedfast" <[email protected]> wrote: > >>>> > >>>>> Hi Chris, > >>>>> > >>>>> I've taken a look at this and the problem is that once an > >>>>> MKAnnotationView is created for your MKAnnotation subclass, you are > >>>>> doing nothing to signal to the MKMapView that anything has changed. > >>>>> Setting a new coordinate on your MKAnnotation subclass has no way of > >>>>> notifying the parent MKMapView that it needs to redraw. > >>>>> > >>>>> Here's what I suggest you do: > >>>>> > >>>>> In your MKAnnotation subclass (MyAnnotation), add an event that gets > >>>>> emitted when you set/change the coordinate. Then, have your > >>>>> ViewController that owns the MKMapView listen for those events on each > >>>>> of your MyAnnotations. When the event is emitted, have your > >>>>> ViewController remove the annotation and re-add it. > >>>>> > >>>>> I tested this and it works. > >>>>> > >>>>> Jeff > >>>>> > >>>>> On Thu, Sep 15, 2011 at 9:26 AM, Chris Hamblett > >>>>> <[email protected]> wrote: > >>>>>> I've added self-contained sample code to Bug 724 > >>>>>> bug 724 > >>>>>> Any updates on a binding that sets off the MapView KVO flag? Is this > >>>>>> fixed > >>>>>> on a new development build? > >>>>>> ~Chris > >>>>>> _______________________________________________ > >>>>>> MonoTouch mailing list > >>>>>> [email protected] > >>>>>> http://lists.ximian.com/mailman/listinfo/monotouch > >>>>>> > >>>>>> > >>>> > >>> > >> > >
_______________________________________________ MonoTouch mailing list [email protected] http://lists.ximian.com/mailman/listinfo/monotouch
