我正在努力解决的一个问题是当我尝试对GMSMapView(Google Maps SDK iOS)的任何部分进行屏幕截图时.UIGraphicsGetImageFromCurrentImageContext()UIImage输出是不可见的.我最终发现GMSMapView是使用OpenGL渲染的.知道这一点,我试图使用glReadPixels()方法.令人不安的是,我能够很好地在iPhone模拟器上检索地图屏幕捕获,但是当我在真实设备上使用相同的方法时,它仍然是不可见的(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]];
Run Code Online (Sandbox Code Playgroud)
论坛建议通过将图层的OPAQUE属性设置为NO并将保留的后台属性设置为YES来缓解iOS 6问题.它确实在模拟器上修复了它,但没有修复它.
我偶然发现的最后一个修复程序是将主OpenGL视图的preserveBackBuffer更新为YES.这是我的技术专长结束的地方.我无法找到更新GMSMapView的preserveBackBuffer值的位置或方法.我假设这是解决我的所有屏幕捕获问题的修复程序.似乎只是运行iOS 6+的设备的问题.
有没有人对这个问题有一个经过测试的解决方法?
我正在使用 iOS 版 Google 地图,我需要创建地图快照。我知道该怎么做。
我不能做的是在幕后做。我无法创建用户看不到的地图,设置边界和标记,然后对其进行拍照。图片最终一片空白。
我使用的代码(Swift)本质上是
var mapView = GMSMapView(frame: CGRect(x: 0, y: 0, width: 300, height: 300));
Run Code Online (Sandbox Code Playgroud)
我指向地图然后等待地图图块加载然后
UIGraphicsBeginImageContext(mapView.frame.size);
mapView.layer.renderInContext(UIGraphicsGetCurrentContext());
var screenShotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
但是我只在左下角看到一个带有 Google 徽标的灰色框。