我正在尝试在 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 上显示图像?
最佳答案
有几个问题:
通过调用
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 = ...
在
rendererForOverlay
,代码正在创建MapOverlayRenderer
的实例但没有给它一个引用overlay
模型对象。调用initWithOverlay
相反:MapOverlayRenderer *mapOverlay = [[MapOverlayRenderer alloc] initWithOverlay:overlay];
顺便说一句,您可以使用注释更轻松地将图像放在该位置(但图像不会像基于叠加的图像那样随缩放级别缩放)。不确定您想要哪个功能。
关于objective-c - MKOverlayRenderer 在 map View 上显示 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459940/