Do you know how to create an animation like the Blue Marble drop User-Location in MKMapView?
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Although I am not sure on the specifics of how Apple accomplished this effect, this feels to me like a great opportunity to use CoreAnimation and custom animatable properties. This post provides some nice background on the subject. I assume by the “Blue Marble drop” animation you’re referring to the following sequence:
calculated
Although this may be simplifying the process slightly, I think it’s a good place to start and more complex/detailed functionality can be added with relative ease (i.e. the small dark circle pulsing as larger circle converges on it.)
The first thing we need is a custom CALayer subclass with a custom property for our outer large light blue circles radius:
and the implementation:
With this infrastructure in place, we can now animate the radius of the outer circle with ease b/c CoreAnimation will take care of the value interpolations as well as redraw calls. All we have to do his add an animation to the layer. As a simple proof of concept, I chose a simple
CAKeyframeAnimationto go through the 3 stage animation:The above is a rather “hacky” proof of concept as I am not sure of the specific way in which you intend to use this effect. For example, if you wanted to oscillate the circle until data was ready, the above wouldn’t make a lot of sense because it will always oscillate twice.
Some closing notes:
example, you’re adding it to an
MKMapView, the above may requiresome tweaking to integrate with MapKit.
EDIT: Also, for performance reasons, you’re probably going to want to make sure the layer is only as big as it needs to be. That is, after your done animating from the larger size, you may want to scale the size down so you’re only using/drawing as much room as necessary. A nice way to do this would be just to find a way animate the
bounds(as opposed tocircleRadius) and perform this animation based the size interpolation but I’ve had some trouble implementing that (perhaps someone could add some insight on that subject).Hope this helps,
Sam