Trouble with overlay using MKPolyline & MKPolylineView

流过昼夜 提交于 2019-12-12 10:09:47

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!