如何在我自己的 UIView 上创建“玻璃”效果?

Posted

技术标签:

【中文标题】如何在我自己的 UIView 上创建“玻璃”效果?【英文标题】:How can I create "glass" effect on my own UIViews? 【发布时间】:2011-02-26 04:22:08 【问题描述】:

我正在开发一个包含一些非矩形 UI 元素的 iPhone 应用程序。目前,我正在继承UIView,在drawRect 中,我使用CGPathRef 来绘制黑色边框和填充颜色的内部。

不过,我想让这些项目看起来更像“按钮”,所以我希望有一些与例如在上面使用的相同类型的“玻璃效果” iPhone 应用程序的图标(当您未将 UIPrerenderedIcon 设置为 true 时)或其他按钮中的图标。

我四处寻找,发现这个,似乎接近我需要的:

Gradients on UIView and UILabels On iPhone

但我很难弄清楚如何将渐变剪裁到我的形状。

视图上的mask 属性似乎是正确的去处,这似乎需要我创建一个新的CALayer 对象,并以某种方式对其应用剪辑。

我希望有一些很好的便利功能可以做到这一点,但如果我需要编写更复杂的东西,那也没关系。我只是很难弄清楚如何将路径应用为蒙版。我不确定是否需要创建一个新的绘图上下文并将路径绘制到其中?然后使用CGContextClip?

我想我已经找到了很多正确的部分,我只是很难理解如何组装它们。

有人可以指出我正确的方向吗? (我很高兴在文档中阅读更多内容,请为我指明正确的方向。)

【问题讨论】:

【参考方案1】:

您可以创建一个 CAShapeLayer 并将其路径设置为您的 CGPathRef。然后将 CAGradientLayer 的 mask 属性设置为您的 shapeLayer。

【讨论】:

我最近一直在做 iPhone 开发,但我会在某个时候尝试一下,让你知道结果。谢谢!

以上是关于如何在我自己的 UIView 上创建“玻璃”效果?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 模糊视图(毛玻璃效果)的简单实现UIVisualEffectView

iOS 毛玻璃效果设置

纯CSS 毛玻璃效果

如何在 Flutter 中实现“磨砂玻璃”效果?

使用CSS实现图片的磨砂玻璃效果

wpf 实现实时毛玻璃(live blur)效果