Iphone 使用MKPolyline&;多段线视图

Iphone 使用MKPolyline&;多段线视图,iphone,objective-c,ios5,mkmapview,mkoverlay,Iphone,Objective C,Ios5,Mkmapview,Mkoverlay,我已经使用addOverlay:方法将覆盖添加到我的MKMapView中。覆盖使用MKPolyline创建,并使用MKPolylineView进行笔划。笔划颜色为蓝色,alpha值为0.7 当视图初始加载时,覆盖正确绘制,但覆盖的周围区域也是蓝色的。。。 当我缩小时,蓝色区域仍然存在,但它会根据我的新缩放级别进行调整。这有点难以描述。。。但基本上我有一个“法线贴图”的小矩形,它被困在一个蓝色的大矩形中 当我缩小以查看整个国家时,它将消失,当我缩小时,一切都正常 我想这可能是因为我没有正确实现MK

我已经使用addOverlay:方法将覆盖添加到我的MKMapView中。覆盖使用MKPolyline创建,并使用MKPolylineView进行笔划。笔划颜色为蓝色,alpha值为0.7

当视图初始加载时,覆盖正确绘制,但覆盖的周围区域也是蓝色的。。。 当我缩小时,蓝色区域仍然存在,但它会根据我的新缩放级别进行调整。这有点难以描述。。。但基本上我有一个“法线贴图”的小矩形,它被困在一个蓝色的大矩形中

当我缩小以查看整个国家时,它将消失,当我缩小时,一切都正常

我想这可能是因为我没有正确实现MKOVERAPPROTOCOL

如果有人有任何想法,请告诉我

编辑:

下面是创建MKPolyline和委托方法的代码

-(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;
}
-(MKPolyline*)蓝色多段线
{
CLLocationCoordinated2D蓝点[16];
蓝点[0]=CLLocationCoordinate2DMake(27.526483,-97.882454);
蓝点[1]=CLLocationCoordinate2DMake(27.526407,-97.887883);
蓝点[2]=CLLocationCoordinate2DMake(27.527244,-97.887905);
蓝点[3]=CLLocationCoordinate2DMake(27.527282,-97.887304);
蓝点[4]=CLLocationCoordinate2DMake(27.527577,-97.887304);
蓝点[5]=CLLocationCoordinated2dMake(27.527596,-97.885727);
蓝点[6]=CLLocationCoordinate2DMake(27.530194,-97.88577);//西尔街和科拉雷大街。
蓝点[7]=CLLocationCoordinate2DMake(27.530213,-97.883892);//雷塔玛和科拉尔大道。
蓝点[8]=CLLocationCoordinate2DMake(27.530279,-97.881907);
蓝点[9]=CLLocationCoordinate2DMake(27.530337,-97.880201);
蓝点[10]=CLLocationCoordinate2DMake(27.530356,-97.877959);
蓝点[11]=CLLocationCoordinate2DMake(27.52753,-97.877884);//西C大道和阿姆斯特朗
蓝点[12]=CLLocationCoordinate2DMake(27.527492,-97.878367);
蓝点[13]=CLLocationCoordinate2DMake(27.527397,-97.878817);
蓝点[14]=CLLocationCoordinate2DMake(27.527349,-97.882454);
蓝点[15]=CLLocationCoordinate2DMake(27.526483,-97.882453);
如果(蓝色多段线==nil)
{
bluePolyline=[MKPolyline polylineWithCoordinates:bluePoints count:16];
}
bluePolyline.title=@“蓝色路线”;
_蓝色多段线=蓝色多段线;
返回蓝色多段线;
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖
{
MKPolylineView*aView=[[MKPolylineView alloc]initWithPolyline:(MKPolyline*)覆盖];
//aView.fillColor=[[UIColor cyanColor]colorWithAlphaComponent:0.2];
aView.strokeColor=[[UIColor blueColor]colorWithAlphaComponent:0.6];
aView.lineWidth=10;
返回视图;
}

我最终通过实施
MKOverlay
协议方法解决了问题:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay; 
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖;
像这样:

- (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;
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖
{
MKPolylineView*aView=[[MKPolylineView alloc]initWithPolyline:(MKPolyline*)覆盖];
如果(overlay.title=@“蓝色路线”)
{
aView.lineWidth=7.0;
aView.strokeColor=[[UIColor blueColor]colorWithAlphaComponent:0.6];
}
如果(overlay.title=@“黄金路线-A”)
{
aView.lineWidth=10.0;
aView.strokeColor=[[UIColor yellowColor]colorWithAlphaComponent:0.6];
}
如果(overlay.title=@“黄金路线-B”)
{
aView.lineWidth=7.0;
aView.strokeColor=[[UIColor yellowColor]colorWithAlphaComponent:0.6];
}
返回视图;
}


每个覆盖都是在我的模型中的其他地方创建的。

我最终通过实现
MKOverlay
协议方法解决了我的问题:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay; 
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖;
像这样:

- (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;
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖
{
MKPolylineView*aView=[[MKPolylineView alloc]initWithPolyline:(MKPolyline*)覆盖];
如果(overlay.title=@“蓝色路线”)
{
aView.lineWidth=7.0;
aView.strokeColor=[[UIColor blueColor]colorWithAlphaComponent:0.6];
}
如果(overlay.title=@“黄金路线-A”)
{
aView.lineWidth=10.0;
aView.strokeColor=[[UIColor yellowColor]colorWithAlphaComponent:0.6];
}
如果(overlay.title=@“黄金路线-B”)
{
aView.lineWidth=7.0;
aView.strokeColor=[[UIColor yellowColor]colorWithAlphaComponent:0.6];
}
返回视图;
}


每个叠加都是在我的模型中的其他地方创建的。

你能发布创建和添加MKPolyline和viewForOverlay方法的代码吗?你能附上屏幕截图吗?所以你有一个
bluePolyline
方法、
bluePolyline
ivar和
\bluePolyline
ivar?多段线坐标和viewForOverlay看起来正常。您如何调用
bluePolyline
方法以及从何处调用?从我的“模型”调用
bluePolyline
。如果我的模型是
MapBrain
,则名称为。所以我在我的视图控制器中创建了一个模型的实例,就像这样
MapBrain*MapBrain
当然我也“alloc”“init”。然后我说
self.mapBrain.bluePolyline
,如果不存在新的MKPolyline,它会返回一条新的MKPolyline。我想我可能已经解决了这个问题。实际上,我从未将
MKOverlay
协议放入viewController的头文件中。它在过去的10个版本中工作得非常完美。。。但我很好奇,在我说
@interface className:UIViewController
之前,是如何调用
mapView:viewForOverlay:
的。你能发布创建和添加MKPolyline和viewForOverlay方法的代码吗?你能附上屏幕截图吗?所以你有一个
蓝色的