728x90
반응형
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack{
GeometryReader{ proxy in
let frame = proxy.frame(in: .global)
Image("yamon")
.resizable()
.frame(width: frame.size.width, height: frame.size.height)
}
GeometryReader{ proxy in
BlurView(style: .light)
}
}
.ignoresSafeArea(.all, edges: .all)
}
}
struct BlurView: UIViewRepresentable {
let style: UIBlurEffect.Style
func makeUIView(context: Context) -> UIVisualEffectView {
let view = UIVisualEffectView(
effect: UIBlurEffect(style: style)
)
return view
}
func updateUIView(_ uiView: UIVisualEffectView, context: Context) {
// do nothing
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
ZStack{
GeometryReader{ proxy in
let frame = proxy.frame(in: .global)
Image("yamon")
.resizable()
.frame(width: frame.size.width, height: frame.size.height)
}
.ignoresSafeArea(.all, edges:.all
Image위에 Blur 효과를 중첩하여 시각효과를 나타낼 것이므로 ZStack안에서 설정한다.
GemometryReader를 사용하여 Image의 크기에 맞는 frame을 설정한다.
struct BlurView: UIViewRepresentable {
...
}
UIViewRepresentable 프로토콜은 UIKit을 SwiftUI에서 사용하기 위해 SwiftUI 형태의 화면으로 만들기 위한 프로토콜이다.
UIViewd의 화면을 기본적으로 반환하는 makeUIView(context:) -> Self.UIVIewType 과 업데이트 할때 사용되는 updateUIView(Self.UIViewType, context: Self.Context)
두개의 메서드를 구현해야 한다.
let style: UIBlurEffect.Style
func makeUIView(context: Context) -> UIVisualEffectView {
let view = UIVisualEffectView(
effect: UIBlurEffect(style: style)
)
return view
}
func updateUIView(_ uiView: UIVisualEffectView, context: Context) {
// do nothing
}
style 상수에 UIVlureEffect.Style을 선언해준 후
makeUIView와 updateUIView 메서드를 구현한다.
이번 연습에서는 초기 화면에 Blur 효과만 적용하는 것을 연습해보기 위해서 updateUIVIew는 구현하지 않았다.
GeometryReader{ proxy in
BlurView(style: .regular)
}
기존 Image위를 BlurView로 덮는다.
반응형
'IOS' 카테고리의 다른 글
SwiftUI, 아이콘전환 인터렉티브 애니메이션(shape morphing) (0) | 2023.07.18 |
---|---|
SwiftUI, 인터렉티브 다이나믹 아일랜드 스크롤 애니메이션 만들기[1] (0) | 2023.07.10 |
Playground 코딩 배우기 2 총 개수 모으기 (0) | 2023.05.15 |
Playground 코딩 배우기2 - 스위치 모으기 (0) | 2023.05.15 |
SwiftUI-100Days - WeSplit (0) | 2023.04.07 |