MKMapView iOS6上有多个MKPolyline

我正在使用MKMapView使用MKPolyline绘制路线,我能够使用一组路点绘制单一路线。现在我想在MKMapView上绘制多个MKPolyline ,例如,从28.102021, 77.1012928.20320, 77.3021蓝色MKPolyline红色MKPolyline28.50930, 77.8919228.60291, 77.87328 。 我怎样才能做到这一点?

码:

 - (void)viewDidLoad { [super viewDidLoad]; locationManager = [[CLLocationManager alloc] init]; locationManager.desiredAccuracy = 6.0; locationManager.distanceFilter = 1.0; [locationManager startUpdatingLocation]; locationManager.delegate = self; map.delegate = self; [map setShowsUserLocation:YES]; [map setUserTrackingMode:MKUserTrackingModeFollow animated:YES]; wayPoints = [[NSMutableArray alloc] initWithCapacity:30]; newWayPoints = [[NSMutableArray alloc]initWithCapacity:10]; totalDistance = 0.0; stopTime = [NSDate dateWithTimeIntervalSinceNow:100]; startTime = [NSDate date]; SEL sel = @selector(timerTargetMethod); NSInvocation* inv = [NSInvocation invocationWithMethodSignature: [self methodSignatureForSelector:sel]]; [inv setTarget:self]; [inv setSelector:sel]; stopTimer = [NSTimer scheduledTimerWithTimeInterval:5 invocation:inv repeats:true]; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { if(newLocation != nil && oldLocation != newLocation) { tempNewLocation = newLocation; tempOldLocation = oldLocation; } } - (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views { MKAnnotationView *annotationView = [views objectAtIndex:0]; id mp = [annotationView annotation]; MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate] ,4000,4000); [mv setRegion:region animated:YES]; } // MKMapViewDelegate - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id )overlay { MKOverlayView* overlayView = nil; MKPolylineView * routeLineView = [[MKPolylineView alloc] initWithPolyline:self.routeLine]; routeLineView.fillColor = [UIColor colorWithRed:0.0-1.0 green:0.0-1.0 blue:0.0-1.0 alpha:1.0f]; routeLineView.strokeColor = [UIColor colorWithRed:0.0-1.0 green:0.0-1.0 blue:0.0-1.0 alpha:1.0f]; routeLineView.lineWidth = 3; routeLineView.lineCap = kCGLineCapSquare; overlayView = routeLineView; return overlayView; } //define the targetmethod -(void) timerTargetMethod { if([[NSDate date] timeIntervalSinceDate:startTime] >= 100) { [stopTimer invalidate]; [locationManager stopUpdatingLocation]; NSLog(@"Time started at %@", startTime); NSLog(@"Time up at %@", stopTime); } else if (tempOldLocation.coordinate.latitude == tempNewLocation.coordinate.latitude && tempNewLocation.coordinate.longitude == tempOldLocation.coordinate.longitude) { NSLog(@" Fix location found "); } else if( [[NSDate date] timeIntervalSinceDate:startTime] >= 19 ) { if(roundf([[NSDate date] timeIntervalSinceDate:startTime]) == 20) { NSLog(@"First Time Location Update"); latitudeLongitude.text = [[ NSString alloc] initWithFormat:@"%g , %g", tempNewLocation.coordinate.latitude, tempNewLocation.coordinate.longitude]; float interval = [[NSDate date] timeIntervalSinceDate:startTime]; int okInterval = roundf(interval); NSLog(@"Interval 1 , %d", okInterval ); time.text = [[ NSString alloc] initWithFormat:@"%d", okInterval - 20]; speed.text = @"0"; totalDistance = 0; distance.text = @"0 meters"; } else { latitudeLongitude.text = [[ NSString alloc] initWithFormat:@"%g , %g", tempNewLocation.coordinate.latitude, tempNewLocation.coordinate.longitude]; float interval = [[NSDate date] timeIntervalSinceDate:startTime]; int okInterval = roundf(interval); time.text = [[ NSString alloc] initWithFormat:@"%d", okInterval - 20]; NSLog(@"Interval 2 , %d , %f", okInterval , interval); if((tempNewLocation.coordinate.latitude == tempOldLocation.coordinate.latitude && tempNewLocation.coordinate.longitude == tempOldLocation.coordinate.longitude) || tempNewLocation.speed = 0) totalDistance += [tempNewLocation distanceFromLocation:tempOldLocation] - (tempNewLocation.horizontalAccuracy / 2); else totalDistance += [tempNewLocation distanceFromLocation:tempOldLocation]; if (totalDistance < 0) distance.text = @"0 meters"; else distance.text = [[ NSString alloc] initWithFormat:@"%g meters", totalDistance]; } [wayPoints addObject:tempNewLocation]; MKMapPoint * pointsArray = malloc(sizeof(CLLocationCoordinate2D)*2); pointsArray[0]= MKMapPointForCoordinate(tempOldLocation.coordinate); pointsArray[1]= MKMapPointForCoordinate(tempNewLocation.coordinate); routeLine = [MKPolyline polylineWithPoints:pointsArray count:2]; free(pointsArray); if (tempNewLocation.coordinate.latitude - tempOldLocation.coordinate.latitude < 1) { [map addOverlay:routeLine]; } } } 

谢谢

这是你在那里展示的很多代码,唯一相关的是viewForOverlay 。 在那里,您将获得一个符合MKOverlay协议的对象,如果您已经创建了自己的类来实现,那么您可以添加一个变量,该变量可用于识别您在该点处理的覆盖,从而调整颜色。 在你的代码中,我看到你正在创建MKPolyline ,这些是传递给viewForOverlay的叠加层,因为它们inheritance自MKShape它们具有你可以使用的titlesubTitle属性。

因此,当您创建MKPolyline您可以设置title ,可能是“typeA”和“typeB”,然后在viewForOverlay您需要将叠加层转换为MKPolyline并检查它具有哪个标题来决定使用哪种颜色:

 - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id )overlay { if([overlay class] == MKPolyline.class) { MKOverlayView* overlayView = nil; MKPolyline* polyline = (MKPolyline *)overlay; MKPolylineView * routeLineView = [[MKPolylineView alloc] initWithPolyline:polyline]; if([polyline.title isEqualToString:@"typeA"]) { routeLineView.fillColor = [UIColor redColor]; routeLineView.strokeColor = [UIColor redColor]; } else { routeLineView.fillColor = [UIColor blueColor]; routeLineView.strokeColor = [UIColor blueColor]; } routeLineView.lineWidth = 3; routeLineView.lineCap = kCGLineCapSquare; overlayView = routeLineView; return overlayView; } else { return nil; } }