How to add annotation in Mapview with image and label in IPhone?

image1image here

I use MKMapview in my application for iPhone.

How to assign values ​​to annotations in MKMapkit Framework?

+4
source share
2 answers

You can use a custom view for each annotation with one UIView , one UIImageView and one shortcut to display a different value. This will be done as part of the method - (MKAnnotationView *)mapView:(MKMapView *)newMapView viewForAnnotation:(id )newAnnotation . You must make the UIView double in size with a transparent color relative to the UIImageView in order to more accurately view the scale and zoom out in the mapview.

The code -----

 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { static NSString * const kPinAnnotationIdentifier = @"PinIdentifier"; if(annotation == self._mapView.userLocation) { return nil; } MyAnnotation *myAnnotation = (MyAnnotation *)annotation; MKAnnotationView *newAnnotation = (MKAnnotationView*)[self._mapView dequeueReusableAnnotationViewWithIdentifier:kPinAnnotationIdentifier]; if(!newAnnotation){ newAnnotation = [[MKAnnotationView alloc] initWithAnnotation:myAnnotation reuseIdentifier:@"userloc"]; } NSDictionary *dict=[alertInfoArray objectAtIndex:myAnnotation.ann_tag]; UIView *anView=[[UIView alloc] init]; anView.backgroundColor=[UIColor clearColor]; UIImageView *bgImg=[[UIImageView alloc] init]; bgImg.image=[UIImage imageNamed:@""]; bgImg.backgroundColor=[UIColor clearColor]; UIImageView *imgView=[[UIImageView alloc] init]; imgView.tag=myAnnotation.ann_tag; UILabel *lblName=[[UILabel alloc] init]; lblName.font=[UIFont systemFontOfSize:12]; lblName.textAlignment=UITextAlignmentCenter; lblName.textColor=[UIColor whiteColor]; lblName.backgroundColor=[UIColor clearColor]; lblName.text=TEXT YOU WANT ; newAnnotation.frame=CGRectMake(0, 0, 70, 212); anView.frame=CGRectMake(0, 0, 70, 212); bgImg.frame=CGRectMake(0, 0, 70, 106); bgImg.image=[UIImage imageNamed:@"thumb-needhelp.png"]; imgView.frame=CGRectMake(8,25,55,48); imgView.image=[UIImage imageNamed:@"girl-default.png"]; lblName.frame=CGRectMake(5,79,60,10); [anView addSubview:bgImg]; [bgImg release]; [anView addSubview:imgView]; [imgView release]; [newAnnotation addSubview:anView]; [anView release]; newAnnotation.canShowCallout=YES; [newAnnotation setEnabled:YES]; return newAnnotation; } 

Hope this helps.

+16
source
  • Create your own annotation class ( MKAnnotation )
  • Create your own AnnotationView class ( MKAnnotationView )

Make sure that you define the title, background image, and other custom annotation elements in the AnnotationView class as properties.

  • Cancel the following method and set the values ​​of the properties defined in the AnnotationView class.

     - (MKAnnotationView*) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{ if ([<Object of CustomAnnotation class> isKindOfClass:[MKUserLocation class]]) return nil; CustomAnnotation* custom_anno = (CustomAnnotation*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"custom_annotation"]; if (!custom_anno){ custom_anno = [[CustomAnnotation alloc] initWithAnnotation:annotation reuseIdentifier:@"custom_annotation"]; custom_anno.frame = CGRectMake(0, 0, 250, 57.5); custom_anno.canShowCallout = NO;//CHange if you want to change callout behaviour (thats is it abilty to apper). I set it top no because i did not want a callout. UIImageView* icon = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 40, 40)]; [icon setImageWithURL:<your image> placeholderImage:<your placeholder image>];//placeholder image = nil if you do not want one. icon.backgroundColor = [UIColor lightGrayColor]; UILabel* name = [[UILabel alloc] initWithFrame:CGRectMake(50, 5, 200, 20)]; name.text = nameValue; UILabel* category = [[UILabel alloc] initWithFrame:CGRectMake(50, 25, 200, 20)]; category.text = otherValue; [custom_anno addSubview:icon]; [custom_anno addSubview:name]; [custom_anno addSubview:category]; } return custom_anno; } 

    My custom annotation class was “Annotation,” and my custom annotation view class was “CustomAnnotation.” Change according to your needs.

After that, just create an object of the Annotation class and use it.

EDIT:

Make sure you override the follwing method in your class of custom annotation view:

in .h:

 - (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier; 

in .m:

 - (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{ self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]; if (self) { } return self; 

}

EDIT 2:

You can use it in your view controller as follows:

 MKMapView* cellMap = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 290, 100)]; cellMap.delegate = self; cellMap.userInteractionEnabled = NO; CLLocationCoordinate2D center = CLLocationCoordinate2DMake(<your coordinates>); MKCoordinateSpan span = MKCoordinateSpanMake(0.04, 0.04); MKCoordinateRegion region = MKCoordinateRegionMake(center, span); cellMap.showsUserLocation = NO; [cellMap setRegion:region animated:YES]; Annotation* anon = [[Annotation alloc] init]; anon.coordinate = center; [cellMap addAnnotation:anon]; [checkIn addSubview:cellMap]; 
+6
source

Source: https://habr.com/ru/post/1499074/


All Articles