iOS MapKit custom pins

前端 未结 3 649
别跟我提以往
别跟我提以往 2020-12-13 08:01

How do I show images instead of pins in the map. So far I can only add pins on tap. A sample code of the .m would extremely help since i\'m still new to iOS programming.

相关标签:
3条回答
  • 2020-12-13 08:27
    #pragma mark -
    #pragma mark MKMapView delegate
    - (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id <MKAnnotation>)annotation
    {
        if ([annotation isKindOfClass:[MKUserLocation class]])
            return nil;
        static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
        MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
        if(annotationView)
            return annotationView;
        else
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:AnnotationIdentifier] autorelease];
            annotationView.canShowCallout = YES;
            annotationView.image = [UIImage imageNamed:@"someImage.png"];
            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            [rightButton addTarget:self action:@selector(writeSomething:) forControlEvents:UIControlEventTouchUpInside];
            [rightButton setTitle:annotation.title forState:UIControlStateNormal];
            annotationView.rightCalloutAccessoryView = rightButton;
            annotationView.canShowCallout = YES;
            annotationView.draggable = YES;
            return annotationView;
        }
        return nil;
     }
    

    EDIT:

    I could explain to you all about the MKAnnotationView, but I think you will find the documentation provided by Apple to be a far better explanation than from any other source. Check the overview section in the link.

    https://developer.apple.com/documentation/mapkit/mkannotationview

    0 讨论(0)
  • 2020-12-13 08:31

    Go to organizer of Xcode and then go to documentation and search weatherMap it shows example for map with including images at annotation.

    0 讨论(0)
  • 2020-12-13 08:33
    #pragma mark -
    #pragma mark MKMapView delegate
    -(void)addAllPinsOnMapView
    {
    
    
    
    MKCoordinateRegion region = mapViewOffer.region;
    region.center = CLLocationCoordinate2DMake(12.9752297537231, 80.2313079833984);
    region.span.longitudeDelta= 0.1f;
    region.span.latitudeDelta= 0.1f;
    [mapViewOffer setRegion:region animated:YES];
    
    
    
    
    
    
    mapViewOffer.delegate=self;
    arrMapPin=[[NSMutableArray alloc] init];
    NSArray *name=[[NSArray alloc]initWithObjects:
                   @"Title1",
                   @"Title2",
                   @"Title3", nil];
    
    NSMutableArray *arrCoordinateStr = [[NSMutableArray alloc] initWithCapacity:name.count];
    [arrCoordinateStr addObject:@"12.970760345459,80.2190093994141"];
    [arrCoordinateStr addObject:@"12.9752297537231,80.2313079833984"];
    [arrCoordinateStr addObject:@"12.9788103103638,80.2412414550781"];
    
    for(int i = 0; i < name.count; i++)
    {
        NSArray *components = [[arrCoordinateStr objectAtIndex:i] componentsSeparatedByString:@","];
        double latitude = [components[0] doubleValue];
        double longitude = [components[1] doubleValue];
    
        MKPointAnnotation *mapPin = [[MKPointAnnotation alloc] init];
        CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude, longitude);
        mapPin.title = [name objectAtIndex:i];
        mapPin.coordinate = coordinate;
        [mapViewOffer addAnnotation:mapPin];
    }
    }
    - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:
    (MKAnnotationView *)view
    {
    NSLog(@"%@",view.annotation.title);
    NSLog(@"%f",view.annotation.coordinate.latitude);
    NSLog(@"%f",view.annotation.coordinate.longitude);
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(calloutTapped:)];
    [view addGestureRecognizer:tapGesture];
    
    }
    -(void)calloutTapped:(UITapGestureRecognizer *) sender
    {
    NSLog(@"Callout was tapped");
    
    MKAnnotationView *view = (MKAnnotationView*)sender.view;
    id <MKAnnotation> annotation = [view annotation];
    if ([annotation isKindOfClass:[MKPointAnnotation class]])
    {
        //[self performSegueWithIdentifier:@"annotationDetailSegue" sender:annotation];
        OfferDetailsViewController *objOfferDetailsViewController = [[OfferDetailsViewController alloc]init];
        [self.navigationController pushViewController:objOfferDetailsViewController animated:YES];
    }
    }
    - (MKAnnotationView *)mapView:(MKMapView *)theMapView 
    viewForAnnotation:(id <MKAnnotation>)annotation
    {
    MKAnnotationView *pinView = nil;
    static NSString *defaultPinID = @"annotationViewID";
    pinView = (MKAnnotationView *)[mapViewOffer dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
    if ( pinView == nil ){
        pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID];
    }
    
    pinView.canShowCallout = YES;
    pinView.image = [UIImage imageNamed:@"placeholder"];
    
    
    UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [infoButton addTarget:self action:@selector(infoButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    pinView.rightCalloutAccessoryView = infoButton;
    
    return pinView;
    }
    
    0 讨论(0)
提交回复
热议问题