Есть ли способ размыть фон в SwiftUI? - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь размыть фон представления, но не хочу разбиваться на UIKit, чтобы выполнить его (например, UIVisualEffectView). Я копаюсь в документах и ​​никуда не попал, похоже, нет пути Live-клип фон и применять к нему эффекты. Я ошибаюсь или смотрю на это неправильно?

1 Ответ

3 голосов
/ 15 июня 2019

Я еще не нашел способ добиться этого в SwiftUI, но вы можете использовать UIKit через протокол UIViewRepresentable.

struct BlurView: UIViewRepresentable {

    let style: UIBlurEffect.Style

    func makeUIView(context: UIViewRepresentableContext<BlurView>) -> UIView {
        let view = UIView(frame: .zero)
        view.backgroundColor = .clear
        let blurEffect = UIBlurEffect(style: style)
        let blurView = UIVisualEffectView(effect: blurEffect)
        blurView.translatesAutoresizingMaskIntoConstraints = false
        view.insertSubview(blurView, at: 0)
        NSLayoutConstraint.activate([
            blurView.heightAnchor.constraint(equalTo: view.heightAnchor),
            blurView.widthAnchor.constraint(equalTo: view.widthAnchor),
        ])
        return view
    }

    func updateUIView(_ uiView: UIView,
                      context: UIViewRepresentableContext<BlurView>) {

    }

}

Демо :

struct ContentView: View {

    var body: some View {
        NavigationView {
            ZStack {
                List(1...100) { item in
                    Rectangle().foregroundColor(Color.pink)
                }
                .navigationBarTitle(Text("A List"))
                ZStack {
                    BlurView(style: .light)
                        .frame(width: 300, height: 300)
                    Text("Hey there, I'm on top of the blur")

                }
            }
        }
    }

}

Я использовал ZStack, чтобы поместить представления поверх него.

ZStack {
 // List
 ZStack {
    // Blurred View
    // Text
 }
}

И в итоге выглядело так:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...