【问题标题】:How to: Display MKOverlay on MKMapView如何:在 MKMapView 上显示 MKOverlay
【发布时间】:2012-02-21 19:32:16
【问题描述】:

我需要在地图上显示一个 MKOverlay,但无法让它真正出现。

我正在关注 Apple 的 Location Awareness Programming Guide 中的 example,但不会显示叠加层。任何帮助将不胜感激,这是我制作的第一个 iPhone 应用程序,所以我可能会遗漏一些简单的东西。

NavViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface NavViewController : UIViewController <MKMapViewDelegate> {
}
@property (weak, nonatomic) IBOutlet MKMapView *mapView;

@end

NavViewController.m

#import "MSUNavViewController.h"
#import <CoreLocation/CoreLocation.h>

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
    if ([overlay isKindOfClass:[MKPolygon class]])
    {
        MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay];

        aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
        aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7];
        aView.lineWidth = 3;

        return aView;
    }
    return nil;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Define an overlay that covers Colorado.
    CLLocationCoordinate2D  points[4];

    points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116);
    points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066);
    points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981);
    points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267);

    MKPolygon* poly = [MKPolygon polygonWithCoordinates:points count:4];
    poly.title = @"Colorado";

    [_mapView addOverlay:poly];
}

故事板:

任何编码建议将不胜感激。 谢谢!

【问题讨论】:

    标签: ios ios5 mapkit mkoverlay


    【解决方案1】:

    确保将 mapView 的 delegate 设置为视图控制器实例(在这种情况下可能是 File's owner)。

    在界面生成器中,右键单击地图视图,从委托右侧的空心圆圈拖动到左侧窗格中占位符部分的文件所有者图标。

    对于情节提要,连接到视图控制器图标而不是文件所有者。

    【讨论】:

    • 如何将委托设置为视图控制器实例?我是新手。
    • 右键nib的map view,先查看MKMapView的引用outlet是否为mapView - File's Owner,再查看其delegate的outlet是否为File's owner
    • 看起来委托未设置,我不知道如何将其设置为“文件所有者”。另外,我在 IOS 5 上,所以文件的所有者图标没有出现。
    • 看图。从代表圆圈拖动到屏幕底部的黄色大圆圈。或者在 - (void)viewDidLoad 方法中添加_mapView.delegate = self;
    • delegate右侧的空心圆圈拖动到左侧窗格中Placeholder部分的File's Owner图标。
    【解决方案2】:

    可能你杀死了return nil;- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id &lt;MKOverlay&gt;)overlay 中的aView 尝试在之前添加else

    - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
    {
        if ([overlay isKindOfClass:[MKPolygon class]])
        {
            MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay];
    
            aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
            aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7];
            aView.lineWidth = 3;
    
            return aView;
        }
        else return nil;
    } 
    

    【讨论】:

    • 谢谢,但这不是问题。
    【解决方案3】:

    你的问题解决了吗?只需从代表旁边的圆圈(在您的屏幕截图中)拖动到作为班级名称的圆圈..检查器中有一个设置可以让您显示您所在的位置..?您需要将地图以 viewDidLoad 为中心,以便它显示在科罗拉多州。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多