LiYanan2004 / MegaX

[WIP] A powerful set of reusable SwiftUI components and modifiers
https://liyanan2004.github.io/MegaX/documentation/megax
23 stars 1 forks source link

Remove the built-in filters of .ultraThinMaterial to better control t… #3

Open hstdt opened 9 months ago

hstdt commented 9 months ago

移除使用默认的.ultraThinMaterial,因为默认的blur效果太强了且不可控。避免手动设置grayscale等参数,可以更自由添加更多滤镜效果。

左边是之前的效果,右边是新的效果。 CleanShot 2024-03-02 at 18 34 09

LiYanan2004 commented 9 months ago

这个效果我看过,对于立刻想获得这样的效果是很好的一种实现(只需要 iOS Target)

但是其实这个组建设计之初我就是希望能够使用 SwiftUI 的内置组建来完成,这样可以灵活的部署到所有设备上。

Bug

你这个实现存在一个问题,你试试看切换深/浅色模式,再切回去,移除掉的 filter 又回来了。

解决办法是:自定义一个 VisualEffectView 继承 UIVisualEffectView 把 traitCollection 覆盖掉。

Merge

你可以尝试把 macOS 的版本也做出来,这样我可能会考虑合并。

More Advanced one WIP

我现在也在找寻一种更加灵活的方式来构建这个 BackdropBlurView,可以参考我的 Tweet

目前能实现的样子:

bdview

现在的开发卡在 iOS 上,如果你有兴趣,我们也可以一起研究☺️

hstdt commented 9 months ago

@LiYanan2004 已更新

LiYanan2004 commented 9 months ago

ok. 先放一下,如果我的 BackdropEffectView 失败了我就来合这个

hstdt commented 9 months ago

BackdropEffectView有demo代码么,没看懂思路

LiYanan2004 commented 9 months ago

我只能简单地讲一下,太详细的一下子也讲不清楚,就是通过使用 UIView/NSView 来找 Layer Tree 中下层的内容,用 TimelineView + Canvas 画上去,这样就得到了一个 SwiftUI 的 backdrop 层,我们就可以在它上面加 blur、shader 这些了