SwiftUIではコンポーネントにblurをかけることが簡単になっている。
これはUIKitではできないものかと。
CALayerには古くからfilterというプロパティがある (たしかmacOSではCIFilterが使えたんだっけ?)
iOSではCAFilterというオブジェクトが利用されているようだがそれはprivate-api
しかし、SwiftUIでblurや明るさ調整など、明らかにフィルターが担当することを呼び出せること、そして、それらをUIKitとCoreAnimationという資産の上で基本は成り立っているSwiftUIということからCALayer.filtersが使われていると推測。
RevealでBlurをかけたコンポーネントのアドレスを取得し、LLDBから覗いてみる。
(lldb) po [(CALayer*)0x600003cb0cc0 filters]
<Swift.__SwiftDeferredNSArray 0x600003cb0d00>(
colorBrightness,
gaussianBlur
)
やはり。
(lldb) expr -T -d run-target -- [(CALayer*)0x600003cb0cc0 filters][0]
(CAFilter *) $12 = 0x00006000032a1ad0
そして、中身はやはりCAFilter
CoreAnimationに隠れているPrivateAPIを使ってみたという記事
runtime-header
例は雑だけど、適当に呼んでみたら確かに動いた
TimOliverさんがこのあたりのAPIを利用したOSSを作っていた