问题
I have added an overlay to my MKMapView using the addOverlay: method. The overlay was made using MKPolyline and stroked using MKPolylineView. The stroke color is blue, with an alpha value of 0.7.
When the view initially loads, the overlay is drawn correctly but the surrounding areas of the overlay are blue as well... When I pinch & zoom out, the blue area is still there but it adjusts to my new zoom level. This is somewhat hard to describe... but basically I have a small rectangle of "normal map" trapped inside a larger rectangle that is blue.
It will disappear when I zoom out to view the entire country and when I zoom back in everything is normal.
I think this may be caused by me not implementing the MKOverlayProtocol correctly?
If anyone has any ideas please throw them my way...
EDIT:
Here is the code that creates the MKPolyline and the delegate method.
-(MKPolyline *)bluePolyline
{
CLLocationCoordinate2D bluePoints[16];
bluePoints[0] = CLLocationCoordinate2DMake(27.526483, -97.882454);
bluePoints[1] = CLLocationCoordinate2DMake(27.526407, -97.887883);
bluePoints[2] = CLLocationCoordinate2DMake(27.527244, -97.887905);
bluePoints[3] = CLLocationCoordinate2DMake(27.527282, -97.887304);
bluePoints[4] = CLLocationCoordinate2DMake(27.527577, -97.887304);
bluePoints[5] = CLLocationCoordinate2DMake(27.527596, -97.885727);
bluePoints[6] = CLLocationCoordinate2DMake(27.530194, -97.88577); //Seale St. & Corrale Ave.
bluePoints[7] = CLLocationCoordinate2DMake(27.530213, -97.883892); //Retama & Corral Ave.
bluePoints[8] = CLLocationCoordinate2DMake(27.530279,-97.881907);
bluePoints[9] = CLLocationCoordinate2DMake(27.530337,-97.880201);
bluePoints[10] = CLLocationCoordinate2DMake(27.530356,-97.877959);
bluePoints[11] = CLLocationCoordinate2DMake(27.52753,-97.877884); //West C Ave. & Armstrong
bluePoints[12] = CLLocationCoordinate2DMake(27.527492,-97.878367);
bluePoints[13] = CLLocationCoordinate2DMake(27.527397,-97.878817);
bluePoints[14] = CLLocationCoordinate2DMake(27.527349,-97.882454);
bluePoints[15] = CLLocationCoordinate2DMake(27.526483, -97.882453);
if(bluePolyline == nil)
{
bluePolyline = [MKPolyline polylineWithCoordinates:bluePoints count:16];
}
bluePolyline.title = @"Blue Route";
_bluePolyline = bluePolyline;
return _bluePolyline;
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
MKPolylineView *aView = [[MKPolylineView alloc] initWithPolyline:(MKPolyline *)overlay];
//aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.6];
aView.lineWidth = 10;
return aView;
}
回答1:
I ended up fixing my problem by implementing the MKOverlay
Protocol method:
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay;
like so:
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
MKPolylineView *aView = [[MKPolylineView alloc] initWithPolyline:(MKPolyline *)overlay];
if(overlay.title == @"Blue Route")
{
aView.lineWidth = 7.0;
aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.6];
}
if(overlay.title == @"Gold Route-A")
{
aView.lineWidth = 10.0;
aView.strokeColor = [[UIColor yellowColor] colorWithAlphaComponent:0.6];
}
if(overlay.title == @"Gold Route-B")
{
aView.lineWidth = 7.0;
aView.strokeColor = [[UIColor yellowColor] colorWithAlphaComponent:0.6];
}
return aView;
}
Where each overlay was created elsewhere in my model.
来源:https://stackoverflow.com/questions/9220874/trouble-with-overlay-using-mkpolyline-mkpolylineview