在Google Maps SDK for iOS上执行GMSMapView的屏幕截图

当我尝试拍摄GMSMapView(Google Maps SDK iOS)的任何部分时,我正在努力的一个项目。 UIGraphicsGetImageFromCurrentImageContext()UIImage输出是不可见的。 我最终发现,GMSMapView是用OpenGL渲染的。 知道这一点,我试图使用glReadPixels()方法。 令人不安的是,我能够在iPhone模拟器上检索地图屏幕截图,但是当我在真实设备上使用同样的方法时,它仍然是不可见的(iOS 6)。

我想知道是否有人遇到同样的问题? 我已经做了我的调查份额。 我找不到与我的情况有关的任何事情。 我发现的大多数通用解决scheme都说我应该更新一些CAEAGLLayer属性。 我认为GMSMapView会限制我find适当的层,但是我能够find并更新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]]; 

论坛build议通过将图层的OPAQUE属性设置为NO,并将保留的后台属性设置为YES,可以缓解iOS 6问题。 它确实在模拟器上,但不是设备。

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

有没有人有这个问题的testing解决方法?

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

  UIImage* image = [GMSScreenshot screenshotOfMainScreen]; 

但是,v1.2中已经删除了这个图层,因为现在可以使用标准graphics上下文方法来捕获地图图层。 假设GMSMapView是'self'的子视图:

 - (UIImage *)captureScreen { UIGraphicsBeginImageContextWithOptions(self.frame.size, YES, 0.0f); [self.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } 

我在Google地图组上打开了一个问题,用于GMSMapView的屏幕截图。 他们说

我相信在1.1.0版本中,现在可以使用GMSScreenshot screenshotOfMainScreen 。