Swift问题:在另一视图上层添加PhotoEditPreviewController时无法设透明背景
解决GLKView在iPhone7/8/X上显示黑色背景的问题
我之前做图像编辑类项目时也碰到过类似的GLKView跨机型透明失效的坑,给你几个针对性的排查和解决思路:
检查GLKView的颜色格式配置
新机型的GLKView默认颜色格式可能不带alpha通道,导致透明设置不生效。你需要明确设置支持RGBA的格式:GLKView *glkView = // 获取你的GLKView实例 glkView.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888;强制关闭视图不透明属性并设置透明图层背景
除了设置图层背景色,一定要把opaque设为NO,否则系统会优化渲染,忽略你的透明设置:glkView.opaque = NO; glkView.layer.backgroundColor = UIColor.clearColor.CGColor; glkView.backgroundColor = UIColor.clearColor;修正GLK渲染回调中的清屏操作
如果你的GLKViewController实现了glkView:drawInRect:方法,清屏时要把alpha值设为0,否则会填充黑色背景覆盖透明效果:- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { // 清屏时设置透明背景 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 你的其他渲染代码... }禁用深度缓冲(如果不需要的话)
部分新机型默认开启的深度缓冲可能会干扰透明显示,尝试关闭它:glkView.drawableDepthFormat = GLKViewDrawableDepthFormatNone;排查视图层级的父视图影响
确认PhotoEditPreviewController的根view、SpriteEditController的view以及你的自定义上层视图,是否都设置了透明背景,避免父视图的黑色背景透出来被误认为是GLKView的问题。
内容的提问来源于stack exchange,提问作者Sunil Zishan
相关产品推荐
相关产品推荐

