使用自定义地址在MapView中删除Pin

时间:2013-08-26 04:57:50

标签: ios mapkit

我在我的应用中创建了一个地图视图。现在我希望用户能够在这些位置添加多个地址来放置引脚。我还希望用户能够删除这些引脚。

有谁知道我在哪里可以找到一个好的教程,或者从哪里开始?我没有使用mapviews的经验......

2 个答案:

答案 0 :(得分:2)

试试这个......

-

(void)ShowPins
{
    activity.hidden=YES;
    [activity stopAnimating];
    double lat;
    double lng;
    for (int ijk=0; ijk<arrayLocationList.count; ijk++)
    {
        /*Set your lat and long here*/
        lat=[[[[arrayLocationList objectAtIndex:ijk]objectForKey:@"location"] objectForKey:@"lat"] doubleValue];         
        lng=[[[[arrayLocationList objectAtIndex:ijk]objectForKey:@"location"] objectForKey:@"lng"] doubleValue];

        CLLocationCoordinate2D geos = CLLocationCoordinate2DMake(lat, lng);
        MKPlacemark* marker = [[MKPlacemark alloc] initWithCoordinate:geos addressDictionary:nil];
        [mapVieww addAnnotation:marker];

    }

    CLLocationCoordinate2D coord1 = {.latitude = lat, .longitude =lng};
    MKCoordinateSpan span = {.latitudeDelta = .03,.longitudeDelta = .03};

    MKCoordinateRegion region = {coord1, span};
    [mapVieww setRegion:region];
}




- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;
{
    MKPinAnnotationView *newAnnotation = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annotation1"];
    UILabel *lable=[[UILabel alloc]init];
    [newAnnotation addSubview:lable];
    newAnnotation.pinColor = MKPinAnnotationColorRed;
    newAnnotation.animatesDrop = YES;
    newAnnotation.canShowCallout = NO;
    [newAnnotation setSelected:YES animated:YES];
    return newAnnotation;
}

答案 1 :(得分:0)

To Drop pins at several locations u have to try this code:
You need to put all those location latitude and longitude in an array and call this function  everytime after incrementing the num value 
-(void)Mapview
{   NSMutableArray* annotations=[[NSMutableArray alloc] init];
    CLLocationCoordinate2D theCoordinate1;
    theCoordinate1.latitude = [latit[num]doubleValue];
    theCoordinate1.longitude = [longit[num]doubleValue];
    Annotation* myAnnotation1=[[Annotation alloc] init];
    myAnnotation1.coordinate=theCoordinate1;
    [map_view addAnnotation:myAnnotation1];
    map_view.showsUserLocation = NO;
    [annotations addObject:myAnnotation1];
    MKMapRect rect = MKMapRectNull;
    for (id <MKAnnotation> annotation in annotations) {
        MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
        MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 20);
        if (MKMapRectIsNull(rect)) {
            rect = pointRect;
        } else {
            rect = MKMapRectUnion(rect, pointRect);
        }
    }
    map_view.visibleMapRect = rect;
}

You can edit this code by adding leftcallout acessoryview  or modify the contents in callout view .
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
        map_view.showsUserLocation= NO;
        // if it's the user location, just return nil.
        if ([annotation isKindOfClass:[MKUserLocation class]])
            return nil;
         MKPinAnnotationView* pinView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"AnnotationIdentifier"];
        if(pinView == nil)
        {  
            pinView = pinView=[[MKPinAnnotationView alloc]
                               initWithAnnotation:annotation
                               reuseIdentifier:@"currentloc"] ;
            pinView.centerOffset = CGPointMake(0,60);
            pinView.animatesDrop=YES;
            pinView.canShowCallout=YES;

          }
        return pinView;
}

To Remove the pins you can use this code 
        [self.map_view removeAnnotations:map_view.annotations]; 
        (or)
        [self.map_view removeAnnotations: [self.map_view.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]]];