我正在努力解决的一个问题是,当我尝试截取 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]];
论坛建议通过将图层的 OPAQUE 属性设置为 NO 并将保留的支持属性设置为 YES 可以缓解 iOS 6 问题。它确实在模拟器上修复了它,但不是在设备上。
我偶然发现的最后一个修复程序是将主 OpenGL 视图的 preserveBackBuffer 更新为 YES。这就是我的技术专长结束的地方。我无法找到更新 GMSMapView 的 preserveBackBuffer 值的位置或方式。我假设这是可以解决我所有屏幕捕获问题的修复程序。似乎只是运行 iOS 6+ 的设备的问题。
有没有人对此问题有经过测试的解决方法?