gpt4 book ai didi

ios - 在适用于 iOS 的 Google Maps SDK 上截取 GMSMapView 的问题

转载 作者:可可西里 更新时间:2023-11-01 04:35:58 25 4
gpt4 key购买 nike

当我尝试对 GMSMapView (Google Maps SDK iOS) 的任何部分进行屏幕截图时,我遇到了一个问题。 UIGraphicsGetImageFromCurrentImageContext() UIImage 输出是不可见的。我最终发现 GMSMapView 是用 OpenGL 渲染的。知道这一点后,我尝试使用 glReadPixels() 方法。麻烦的是,我能够在 iPhone 模拟器上很好地检索 map 屏幕截图,但是当我在真实设备上使用相同的方法时,它仍然是不可见的 (iOS 6)。

我想知道是否有人遇到过同样的问题?我已经完成了我的调查工作。我找不到与我的情况相关的任何内容。我找到的大多数通用解决方案都说我应该更新一些 CAEAGLLayer 属性。我假设 GMSMapView 会限制我找到合适的层,但我能够找到并更新 CAEAGLLayer,如下所示:

[(CAEAGLLayer *)[[[mapView_ subviews] objectAtIndex:0] layer] setOpaque: NO];

[(CAEAGLLayer *)[[[mapView_ subviews] objectAtIndex:0] layer] setDrawableProperties:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES],kEAGLDrawablePropertyRetainedBacking,kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat,nil]];

论坛建议通过将图层的 OPAQUE 属性设置为 NO 并将保留的支持属性设置为 YES 来缓解 iOS 6 问题。它确实在模拟器上修复了它,但没有在设备上修复它。

我偶然发现的最后一个修复程序说要将主 OpenGL View 的 preserveBackBuffer 更新为 YES。这是我的技术专长结束的地方。我无法找到在哪里或如何更新 GMSMapView 的 preserveBackBuffer 值。我假设这是可以解决我所有屏幕捕获问题的修复程序。似乎只是运行 iOS 6+ 的设备的问题。

是否有人针对此问题有经过测试的解决方法?

最佳答案

在 Google Maps for iOS v1.1 中,有一个 GMSScreenshot 类可以实现这一点。

    UIImage* image = [GMSScreenshot screenshotOfMainScreen];

不过,这在 v1.2 中已被删除,因为现在可以使用标准图形上下文方法捕获 map 图层。假设 GMSMapView 是 'self' 的 subview :

- (UIImage *)captureScreen {
UIGraphicsBeginImageContextWithOptions(self.frame.size, YES, 0.0f);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return image;
}

关于ios - 在适用于 iOS 的 Google Maps SDK 上截取 GMSMapView 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14590545/

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