To create a custom annotation view over map view using
Mapkit framework just follow these simple steps.
Step
1- While adding annotation don’t give its title and subtitle. Just add
it with Latitude / Longitude and take an integer variable that starts with
100(so that its tag do not clash with others) and increases as per the loop for
adding notation.
annotationTag = 100;
for(NSDictionary* postLocateDict in mapData ) {
double lat =
[[postLocateDict objectForKey:@"location_dx"] doubleValue];
double longt =
[[postLocateDict objectForKey:@"location_dy"] doubleValue];
CLLocationCoordinate2D loc;
loc.longitude = longt;
loc.latitude = lat;
MKPointAnnotation
*annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = loc;
[mapViewHuanBao addAnnotation:annotationPoint];
annotationTag++;
}
Step
2- When you add a notation this will call an MKMapViewDelegate function,
just set a tag of that notation.
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id<MKAnnotation>)annotation {
if([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
static NSString *identifier =
@"myAnnotation";
MKAnnotationView *
annotationView = (MKAnnotationView *)[self.mapViewHuanBao dequeueReusableAnnotationViewWithIdentifier:identifier];
if
(!annotationView)
{
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.image = [UIImage imageNamed:@"pin.png"];
}else {
annotationView.annotation = annotation;
}
annotationView.tag = annotationTag;
return
annotationView;
}
Step
3 – When you tap on notation, a delegate function will call where you
can identify the notation by its tag.
(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
Here you will identify the notation by its tag using following
code-
NSInteger indexOfTheObject = [mapView.annotations indexOfObject:view.annotation];
In indexOfTheObject you will get the notation tag.
Step 4- Now create a custom view as
per your requirement, and give tag to every property you used in that view. We
used callout view name as calloutView.
Set its file owner to your view controller.
Step 5- After finding the tag of
selected notation, just use following method to create a custom call out view.
[[NSBundle mainBundle] loadNibNamed:@"calloutView" owner:self options:nil];
CGPoint hitPoint =
[view convertPoint:CGPointZero toView:mapView];
[annotationView2 setFrame:CGRectMake(hitPoint.x-94,hitPoint.y-73, 220, 73)];
annotationView2.tag = selectedAnnotation;
UILabel *nameLbl = (UILabel *)[annotationView2 viewWithTag:[here give
ur tag which u set in custom view]];
And so on....
Step 6- Finally just add it to the
view.
[view addSubview:annotationView2];
You can also navigate it to its detail but for that you have
to add it on map view, because when you are adding it on view it will remove it
from view, so the object is DE
allocated.
We are working on its navigation on click while moving
, comment here if you found any problem.
No comments:
Post a Comment