gpt4 book ai didi

ios - 渲染部分 MKMapView 到图像

转载 作者:可可西里 更新时间:2023-11-01 03:43:51 26 4
gpt4 key购买 nike

我有兴趣捕获 map 的一部分以创建您在弹出窗口顶部看到的图像。我想我会捕获一个 UIImage,你可以从图钉的坐标开始这样做吗?

谢谢

Apple maps popover

最佳答案

你可以尝试这样的事情:

- (UIImage*) imageFromView:(UIView*)view rect:(CGRect)rect {
// capture the full view in an image
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);

[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* viewImg = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

// crop down to just our desired rectangle, accounting for Retina scale
CGFloat scale = [[UIScreen mainScreen] scale];
CGRect scaledRect = CGRectMake(scale * rect.origin.x, scale * rect.origin.y,
scale * rect.size.width, scale * rect.size.height);
CGImageRef resultImgRef = CGImageCreateWithImageInRect([viewImg CGImage], scaledRect);
UIImage* result = [UIImage imageWithCGImage: resultImgRef
scale: 1.0f / scale
orientation: UIImageOrientationUp];

CGImageRelease(resultImgRef);
return result;
}

- (IBAction)onButtonTapped:(id)sender {
// just pick the map's center as the location to capture. could be anything.
CLLocationCoordinate2D center = self.map.centerCoordinate;
// convert geo coordinates to screen (view) coordinates
CGPoint point = [self.map convertCoordinate:center toPointToView: self.map];

// make this span whatever you want - I use 120x80 points
float width = 120.0;
float height = 80.0;
// here's the frame in which we'll capture the underlying map
CGRect frame = CGRectMake(point.x - width / 2.0,
point.y - height / 2.0,
width, height);

// just show the captured image in a UIImageView overlay
// in the top, left corner, with 1:1 scale
UIImageView* overlay = [[UIImageView alloc] initWithImage: [self imageFromView: self.map rect: frame]];
frame.origin = CGPointZero;
overlay.frame = frame;
[self.view addSubview: overlay];
}

imageFromView:rect: 方法只是在给定的 View 中捕获给定的矩形区域,并生成一个 UIImage

onButtonTapped 方法使用第一种方法捕获 map 中心 周围的区域,并将捕获的图像显示在屏幕的左上角。当然,您可以将 map 的 center 替换为您的 pin 坐标,将区域宽度/高度设置为您喜欢的任意值,然后将生成的图像放入弹出 View 中。

这只是一个演示。在将 map 平移到我想要的位置后,我在我的示例应用程序中使用了一个按钮来触发捕获。

结果

enter image description here

限制

我的代码只是以 1:1 的大小比例显示捕获的矩形。当然,如果你愿意,你可以将捕获的 UIImage 放入一个 UIImageView 中,它可以随意缩放。你可以使图像更大。但是,如果这样做,您将失去图像清晰度。此过程只是对 UIView 进行屏幕捕获。它不能直接在 map 数据上工作,所以当你放大它(以更大的尺寸显示图像)时,图像不会像你在 MKMapView 上实际放大时那样锐化.

关于ios - 渲染部分 MKMapView 到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14683909/

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