0

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

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

4

2 回答 2

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;
}
于 2013-08-26T05:15:02.160 回答
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]]]];
于 2013-08-26T05:11:19.200 回答