【问题标题】:Implementing multiple overlays using Mapkit使用 Mapkit 实现多个叠加层
【发布时间】:2014-04-19 00:06:19
【问题描述】:

我正在做一个使用 Mapkit 框架的项目。最初有一张佛罗里达州的地图,上面有许多注释和圆形叠加层,显示了哪些地区可以收货。我想要所有这些,以及一个 MKPolygon 来突出整个州。 (这是通过使用所有坐标的 XML 文件和 Objective-C 中的 XMLParser 来完成的)

MKCircleView 覆盖所有显示都很好,我猜这是因为它们都是同一类型。但是,当我也尝试实现 MKPolygon 视图时,它不允许我这样做。

//Region for fort lauderdale delivery area overlay

MKCoordinateRegion fortLauderdale;
fortLauderdale.center.latitude = FTL_LATITUDE;
fortLauderdale.center.longitude = FTL_LONGITUDE;
fortLauderdale.span.latitudeDelta = SPAN_VALUE;
fortLauderdale.span.longitudeDelta = SPAN_VALUE;

//Create a circle for fort lauderdale area
MKCircle *fortLauderdaleCircle= [MKCircle circleWithCenterCoordinate:fortLauderdale.center radius:5000];
//2KM or 1.24 miles
[self.mapView addOverlay:fortLauderdaleCircle];

//Region for miami delivery area overlay

MKCoordinateRegion miami;
miami.center.latitude = MIA_LATITUDE;
miami.center.longitude = MIA_LONGITUDE;
miami.span.latitudeDelta = SPAN_VALUE;
miami.span.longitudeDelta = SPAN_VALUE;

//Create a circle for miami area
MKCircle *miamiCircle = [MKCircle circleWithCenterCoordinate:miami.center radius:5000];
//2KM or 1.24 miles
[self.mapView addOverlay:miamiCircle];

然后在实现它们的方法中我有这个:

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
    MKCircleView *circleView = [[MKCircleView alloc]initWithCircle:overlay];
    circleView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.5];
    circleView.strokeColor =[[UIColor blueColor] colorWithAlphaComponent:0.6];
    circleView.lineWidth = 1 ;
    return circleView;

    //This is the code for the polygon view but I don't know how
    //to return it without run-time errors 
    //MKPolygonView *polygonView = [[MKPolygonView alloc] initWithPolygon:overlay];
    //polygonView.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.2];
    //polygonView.strokeColor = [[UIColor greenColor] colorWithAlphaComponent:0.6];
    //polygonView.lineWidth = 1;
    //return polygonView;
}

这看起来已经很糟糕了,因为我在方法中调用了两个 return 语句,但这就是我问这个问题的原因。我不认为错误在于我解析 XML 数据的方式,因为在实现之前没有错误。谢谢

【问题讨论】:

  • Return 意味着一切 Return 之后将永远不会被调用...
  • 是的,这是真的。我从一开始就知道这是一个错误。但据我所知,如果不使用该方法,我不知道有任何其他方法可以实现覆盖。这就是实现圆形和多边形覆盖的方式。但似乎只有如果它们是相同的类型就可以了。除了迈阿密和劳德代尔堡,我还有其他 7 个城市有圆形叠加层,它们都显示得很好。
  • 我添加了两个返回语句以表明我希望显示所有圆形叠加层以及多边形叠加层以突出显示整个佛罗里达州。

标签: ios objective-c mapkit


【解决方案1】:

首先,我想指出您正在使用已弃用的方法。 MKOverlayView 在 iOS7 中已弃用。尽管如此,您需要做的是根据传递给委托的覆盖参数确定要返回的覆盖类型。所以,如果我要修改你的代码,我会这样做:

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
    if ([overlay isKindOfClass:[MKCircle class]]) {
        MKCircleView *circleView = [[MKCircleView alloc]initWithCircle:overlay];
        circleView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.5];
        circleView.strokeColor =[[UIColor blueColor] colorWithAlphaComponent:0.6];
        circleView.lineWidth = 1 ;
        return circleView;
    } else if ([overlay isKindOfClass:[MKPolygon class]]) {
        MKPolygonView *polygonView = [[MKPolygonView alloc] initWithPolygon:overlay];
        polygonView.fillColor = [[UIColor greenColor] colorWithAlphaComponent:0.2];
        polygonView.strokeColor = [[UIColor greenColor] colorWithAlphaComponent:0.6];
        polygonView.lineWidth = 1;
        return polygonView;
    }

    return nil;
}

【讨论】:

  • 工作就像一个魅力。非常感谢。这是我放入简历组合的应用程序,非常感谢。
  • 我在 Mapkit 上观看的教程是针对 iOS 6 的,因此可以解释不推荐使用的方法。您能否详细说明这些方法?
  • 新系统使用MKOverlayRenderer。它们类似于旧的 MKOverlayView 系统。你可以在这里阅读更多信息:developer.apple.com/library/ios/documentation/MapKit/Reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多