TestsTested | ✗ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Dec 2014 |
Maintained by .
SVPulsingAnnotationView is a customizable Core Graphics replica of Apple's MKUserLocationView
.
Important note if your project doesn't use ARC: you must add the -fobjc-arc
compiler flag to SVPulsingAnnotationView.m
in Target Settings > Build Phases > Compile Sources.
SVPulsingAnnotationView/SVPulsingAnnotationView
folder into your project. (see sample Xcode project in /Demo
)
You use SVPulsingAnnotationView just like any other MKAnnotationView:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if([annotation isKindOfClass:[MyAnnotationClass class]]) {
static NSString *identifier = @"currentLocation";
SVPulsingAnnotationView *pulsingView = (SVPulsingAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if(pulsingView == nil) {
pulsingView = [[SVPulsingAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
pulsingView.annotationColor = [UIColor colorWithRed:0.678431 green:0 blue:0 alpha:1];
}
pulsingView.canShowCallout = YES;
return pulsingView;
}
return nil;
}
SVPulsingAnnotationView can be customized with the following properties:
@property (nonatomic, strong) UIColor *annotationColor;
@property (nonatomic, readwrite) NSTimeInterval pulseAnimationDuration;
@property (nonatomic, readwrite) NSTimeInterval delayBetweenPulseCycles;
Both the annotation dot and halo ring are drawn using Core Graphics exclusively, therefore making customization possible. The halo ring animation is an authentic copy of Apple's original animation, figured out by introspecting MKUserLocationView
.
The halo ring animation consists of a CAAnimationGroup
encapsulating 3 distinct animations taking care of the opacity, scale, and the halo image itself. Like the original MKUserLocationView
implementation, the animation switches between 3 distinct sizes of the halo ring image (drawn programmatically using haloImageWithRadius:
) for crispier rendering.
For more juicy details, head over to my Recreating MKUserLocationView blog post.
SVPulsingAnnotationView is brought to you by Sam Vermette and contributors to the project. If you have feature suggestions or bug reports, feel free to help out by sending pull requests or by creating new issues. If you're using SVPulsingAnnotationView in your project, attribution would be nice.
Hat tip to Nick Farina for sharing the process of creating his UICalloutView replica.