Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于毛玻璃 #2

Open
SPStore opened this issue Nov 10, 2017 · 9 comments
Open

关于毛玻璃 #2

SPStore opened this issue Nov 10, 2017 · 9 comments

Comments

@SPStore
Copy link

SPStore commented Nov 10, 2017

你好,我能请教你一个问题吗?我最近也封装了一个类似系统的UIAlertController:https://github.com/SPStore/SPAlertController。
弹出效果类似微信微博,但是在实现的过程中遇到一个关于毛玻璃的瓶颈,这个问题我想了很久但是都不知如何实现。无论是微信微博还是系统的,都有一个遮罩,我看了系统的层级关系,这个遮罩是全屏的,颜色为黑色0.4透明。假如在一个控制器中present出对话框,这个控制器的view是绿色,此时对话框的毛玻璃效果不是存粹的对这个绿色进行毛玻璃,为什么?因为我的对话框弹出时,必然在遮罩之上,正是由于这这个遮罩的存在,导致毛玻璃效果总是偏黑,遮罩的0.4黑色加上绿色组合起来才是我最终的毛玻璃,这不是我想要的,我想要的是当我在给对话框毛玻璃的时候,不要受遮罩的影响。系统做到了,微信也做到了,微博也做到了,我就差这一点没做到,真的想了很久,能否帮我出个思路。谢谢。我现在是逮着人就想问,但是又没人能解决。。。

@kukumaluCN
Copy link
Owner

你的弹窗控制器是Controller,还是window,还是纯粹的一个view

@kukumaluCN
Copy link
Owner

我分析过微信的,感觉他使用window制作的,类似于系统的UIAlertView,但是UIAlertController就只是普通的controller。关于毛玻璃的效果,我觉得都有蒙层的遮盖的,只是蒙层的颜色透明度应该不是0.4,可能会更小吧

@SPStore
Copy link
Author

SPStore commented Nov 11, 2017

我的弹窗用的是controller,跟系统的使用方法是一致的。我真的看了系统的,只要打开层级关系图一看就知道了,蒙层是0.4,它的毛玻璃没有受到蒙层的任何影响。不管微信用的是哪种反正他们都做到了毛玻璃不受蒙层的影响

@kukumaluCN
Copy link
Owner

但是看起来,0.4透明度的黑色,会暗很多,会不会不是黑色的,而是灰色或者接近灰黑色,这样的效果,影响会小一些。微信的话,还好,至少形状规则,蒙层可以遮盖一部分,但是系统的不行。我还考虑了渲染颜色或者多图层透明度叠加的问题,但都不行,毛玻璃会一概渲染,所以就开始考虑颜色的问题,系统的蒙层颜色看起来很淡,会不会是一种半透明的灰黑色呢?

@SPStore
Copy link
Author

SPStore commented Nov 11, 2017

这个蒙层的颜色,不是我用肉眼看出来的,而是实实在在的数据,打开层级结构后,右侧栏有每个view的参数,蒙层是 [UIColor whiteColor:0 alpha:0.4];而且系统用的就是iOS8以后的那种毛玻璃UIBlurEffect

@kukumaluCN
Copy link
Owner

哦哦,这样啊,只是看上去颜色不太一样,可能就是因为这里面有什么操作吧,具体还真不知道,记得之前有见过一些封装的对应的库,不知道他们有没有解决。

@SPStore
Copy link
Author

SPStore commented Nov 11, 2017

那你知不知道如何修改present出来的控制器的大小?网上都是在外部直接修改,在外部修改还未必管用。系统的UIAlertController被present出来后,就是我们看到的那么点大,并不是全屏的

@kukumaluCN
Copy link
Owner

系统的popovercontroller,不知道有没有参考价值?我记得直接改变window的大小,rootVC会自适应大小,我之前做的弹窗,都是基于window的

@SPStore
Copy link
Author

SPStore commented Nov 11, 2017

我找到了我的那个毛玻璃的一种想法,因为我的蒙层是直接添加在我自封的控制器的view上,现在我想添加在window上,但是添加后,我发现如果是[keyWindow addSubView]的话,present后,蒙层会显示在最上面,把我的控制器挡住了,如果[keyWindow insertSubview:backgroundView atIndex:0]的话,那蒙层又会在底下,这样蒙层就又被第一个控制器挡住了。第一个控制器指的是 [self presentViewController:alertController animated:YES completion:nil]中的self.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants