gpt4 book ai didi

objective-c - MKOverlayRenderer 在 map View 上显示 UIImage

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:26 24 4
gpt4 key购买 nike

我正在尝试在 iOS 7 中的 map View 上显示图像。

我将 MKOverlayRenderer 子类化如下:

MapOverlayRenderer.h

#import <Foundation/Foundation.h>
@import MapKit;

@interface MapOverlayRenderer : MKOverlayRenderer

@end

MapOverlayRenderer.m

#import "MapOverlayRenderer.h"

@implementation MapOverlayRenderer

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {

UIImage *image = [UIImage imageNamed:@"marker"];
CGImageRef imageReference = image.CGImage;

MKMapRect theMapRect = [self.overlay boundingMapRect];
CGRect theRect = [self rectForMapRect:theMapRect];

CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -theRect.size.height);

CGContextDrawImage(context, theRect, imageReference);
}

@end

我的 View Controller 中有以下内容,其中包含 map View :

ViewController.m

#import "ViewController.h"
#import "MapOverlayRenderer.h"
@import MapKit;

@interface ViewController () <MKMapViewDelegate>

@property (weak,nonatomic) IBOutlet MKMapView *mapView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self.mapView setDelegate:self];
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {

MapOverlayRenderer *mapOverlay = [[MapOverlayRenderer alloc] init];
return mapOverlay;
}

- (IBAction)showSeattle:(id)sender {

CLLocationCoordinate2D location = {47.61167908,-122.33325958};
int radius = 100000; //radius in meters
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, radius, radius);
[self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
}

@end

当调用 IBAction 将 map 缩放到某个位置时,我看不到 map View 顶部的图像。

如何使用 iOS 7 中的 MKOverlayRenderer 在 map View 上显示图像?

最佳答案

有几个问题:

  1. 通过调用 addOverlay 向 map 实际添加叠加层的代码在哪里? ?您需要创建一个类型为 id<MKOverlay> 的对象并将其传递给 addOverlay称呼。您可以创建一个实现 MKOverlay 的自定义类但在这种情况下,您可以只使用 MKCircle代表图像的位置和大小。在showSeattle:方法:

    CLLocationCoordinate2D location = {47.61167908,-122.33325958};
    int radius = 100000; //radius in meters

    MKCircle *c = [MKCircle circleWithCenterCoordinate:location radius:radius];
    [self.mapView addOverlay:c];

    MKCoordinateRegion region = ...
  2. rendererForOverlay ,代码正在创建 MapOverlayRenderer 的实例但没有给它一个引用 overlay模型对象。调用initWithOverlay相反:

    MapOverlayRenderer *mapOverlay 
    = [[MapOverlayRenderer alloc] initWithOverlay:overlay];


顺便说一句,您可以使用注释更轻松地将图像放在该位置(但图像不会像基于叠加的图像那样随缩放级别缩放)。不确定您想要哪个功能。

关于objective-c - MKOverlayRenderer 在 map View 上显示 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com