SwiftUI Animatable Protocol

mystic·2023년 9월 7일
0
post-custom-banner

SwiftUI에서 Animation을 사용할때 withAnimation이나 animation modifier를 사용하곤 하였는데 Animatable protocol 이란것도 있다는 사실을 알게되어 공부하면서 알게된 사실은 Animatable protocol은 서로 다른 뷰를 사용하는 과정에서 애니메이션을 사용하길 원할때 사용한다는 사실이다.

하나의 뷰에서는 잘 작동되지 않는것같고 그렇게 사용하는 사람들도 많이 없는것 같다.

연습코드

struct ContentView: View {
    var body: some View {
        MovingGhostView()
    }
}

struct MovingGhostView: View {
    @State private var offset: CGFloat = 0
    
    var body: some View {
        VStack {
            MovingGhostSubView(offset: offset)
            Button("Animate") {
                withAnimation(.linear(duration: 3)) {
                    offset = 200
                }
            }
        }
    }
}

struct MovingGhostSubView: View, Animatable {
    var offset: CGFloat
    
    var isShowing: Bool {
        offset > 100
    }
    
    var animatableData: CGFloat {
        get { offset }
        set { offset = newValue }
    }
    
    var body: some View {
        VStack {
            Text("👻")
                .position(x: 50, y: 100)
                .offset(x: offset)
            if isShowing {
                Text("⭐️")
                    .font(.largeTitle)
                    .scaleEffect(5)
            }
        }
    }
}
profile
iOS를 좋아하는 학생
post-custom-banner

0개의 댓글