在Google Maps SDK for iOS上拍摄GMSMapView的屏幕截图

在Google Maps SDK for iOS上拍摄GMSMapView的屏幕截图,第1张

概述我正在努力解决的一个问题是当我尝试对GMSMapView(Google Maps SDK iOS)的任何部分进行屏幕截图时. UIGraphicsGet ImageFromCurrentImageContext()UIImage输出是不可见的.我最终发现GMSMapView是使用OpenGL渲染的.知道这一点,我试图使用glReadPixels()方法.令人不安的是,我能够很好地在iPhone模拟 我正在努力解决的一个问题是当我尝试对GMSMapVIEw(Google Maps SDK iOS)的任何部分进行屏幕截图时. UIGraphicsGet ImageFromCurrentimageContext()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的设备的问题.

有没有人对这个问题有一个经过测试的解决方法?

解决方法 在Google Maps for iOS v1.1中,有GMSScreenshot类可以实现此目的.

UIImage* image = [GMSScreenshot screenshotOfMainScreen];

但是,这已在v1.2中删除,因为现在可以使用标准图形上下文方法捕获地图图层.假设GMSMapVIEw是’self’的子视图:

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

以上是内存溢出为你收集整理的在Google Maps SDK for iOS上拍摄GMSMapView的屏幕截图全部内容,希望文章能够帮你解决在Google Maps SDK for iOS上拍摄GMSMapView的屏幕截图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1004905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存