SwiftUI) animation(애니메이션), withAnimation이란, 사용하는 방법

2023. 3. 31. 01:34·앱/SwiftUI

회전하는 애니메이션이나, 혹은 변경되는 애니메이션을 추가하고 싶을때 사용하고 싶어서 애니메이션에 대해서 공부를 해보자!

animation(_: , value: )

우선 animation은 instance Method이다.

animation은 modifier의 일종이며, 동일하게 어떠한 뷰를 받았을때, 해당 애니메이션을 처리한 새로운 뷰를 리턴하게 된다.

따라서 animation의 구현부는 다음과 같다.

func animation<V>(
    _ animation: Animation?,
    value: V
) -> some View where V : Equatable

Animation은 두개의 파라미터를 받게된다.

  • animation : animation은 어떠한 animation을 수행할것인지에 대한 파라미터이다.
  • value: 어떠한 value값이 변했을때 animation을 수행할것인지에 대한 변수를 정해주게 된다.

animation 파라미터

해당 파라미터는 animation의 속도에 관련된 파라미터이다.

  • default : 애플에서 정해준 컴포넌트의 애니메이션
  • linear : 선형적으로 처음부터 끝까지 동일한 속도의 애니메이션
  • easeIn : 처음에는 느렸다가 갈수록 빨라지는 애니메이션
  • easeOut : 속도는 빨랐다가 점점 느려지며 멈추게 되는 애니메이션
  • spring : 스프링처럼 움직이는 느낌의 애니메이션

재밌는 스프링애니메이션

사실 다른 애니메이션은 이름만 들어도 되게 직관적이다.

duration을 통해서 해당애니메이션에 걸리는 시간을 정해주고 그냥 위에 작성한 느낌으로 작성할수 있지만, spring이라는 애니메이션은 이해하기가 조금 어렵다.

따라서 스프링에 대해서 좀더 작성을 해보자면

스프링은 말그대로 스프링이다.

스프링 파라미터

스프링 파라미터는

  • respond : 스프링애니메이션이 작동하는 시간, duration과 동일하다
  • dampingFraction : 스프링의 강도를 의미한다.
  • blendDuration : The duration in seconds over which to interpolate changes to the response value of the spring.

사실 blendDuration은 잘 모르겠다.

재밌는 점은 스프링강도에 따라서 애니메이션이 다시 정상으로 돌아가는 속도에 차이가 난다.

 

 

애니메이션의 적용

애니메이션은 정확히 어떤식으로 View가 적용되는지에 대해서 이해를 해야한다.

기본적으로 view modifier는 하나의 뷰를 받고, 새로이 만든 뷰를 리턴하는 방식으로 작동을 하게 되는데

이러한 부분에서 예를 들어 offset이나, opacity등을 변수를 통해서 변화하는 식으로 작동을하게되면

우리눈에는 한번에 변화하는것으로 보인다.

이것을 .animation이라는 키워드를 통해서 서서히 변화를 하도록 해주는것이다.

예시코드

struct ContentView: View {
    @State private var isAnimation = true
    
    var body: some View {
        VStack {
            Rectangle()
                .foregroundColor(isAnimation ? .yellow : .red)
                .frame(width: isAnimation ? 50 : 100, height: isAnimation ? 50 : 100)
                .animation(.spring(response: 1,dampingFraction: 0.3 ,blendDuration: 40))
            
            Button("Animate") {
                isAnimation.toggle()
            }
        }
    }
}

 

withAnimation()

처음에는 withAnimation에 대해서 이해하기가 어려웠는데 이해하고 나니 엄청 간단했다.

간단하게 설명하자면, 기존의 animation은 animation modifier가 붙은 화면만 애니메이션 처리를 해줬다면

withAnimation은

  • {}안에 들어가는 변화되는 값에 영향을 받는 모든 것에 애니메이션 처리를 하라는것이다.

예제를 보면 이해하가기 굉장히 수월하다!

예제코드

struct ContentView: View {
    @State var isAnimation = false
    
    var body: some View {
        VStack {
            Button("Animate") {
                withAnimation(.easeIn(duration: 1)) {
                    isAnimation.toggle()
                }
            }
            Rectangle().foregroundColor(.red)
                .frame(width: 100, height: 100)
                .opacity(isAnimation ? 0 : 1)
        }
    }
}

 


참고자료

linear | Apple Developer Documentation

 

linear | Apple Developer Documentation

There's never been a better time to develop for Apple platforms.

developer.apple.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'앱 > SwiftUI' 카테고리의 다른 글

SwiftUI) 화면전환 하는 방법들, NavigationLink, TabView, Sheet, Dismiss  (0) 2023.04.12
SwiftUI) LazyVStack과 VStack  (0) 2023.04.12
SwiftUI) some View?? Opaque Type과 some키워드에 관해서  (0) 2023.04.12
SwiftUI) SwiftUI View가 Struct인 이유에 관해  (0) 2023.04.12
SwiftUI) Source of Truth란???  (0) 2023.03.26
'앱/SwiftUI' 카테고리의 다른 글
  • SwiftUI) LazyVStack과 VStack
  • SwiftUI) some View?? Opaque Type과 some키워드에 관해서
  • SwiftUI) SwiftUI View가 Struct인 이유에 관해
  • SwiftUI) Source of Truth란???
진ddang
진ddang
안녕하세요 진땅의 개발자 블로그 입니다. 피드백은 환영입니다. 깃헙 : https://github.com/it794613
    반응형
  • 진ddang
    맛동산이
    진ddang
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • 일기 그리고 목표 (1)
      • 웹 (20)
        • 리액트 (19)
      • 앱 (115)
        • Swift 문법 (15)
        • Swift (65)
        • SwiftUI (32)
        • 리액트 네이티브 (3)
      • CS (30)
        • 컴퓨터그래픽스 (8)
        • 운영체제 (6)
        • 네트워크 (16)
      • 알고리즘 (13)
        • 백준 (12)
        • 프로그래머스 (1)
      • 대외활동 (7)
        • ict한이음(2022.04) (2)
        • 멋쟁이 사자처럼 (5)
        • Apple Developer Academy (0)
      • 다양한 내용들 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    위젯킷
    swift concurrency
    네트워크
    멋사
    uikit
    웹
    알고리즘
    dispatchqueue
    리액트
    컴퓨터그래픽스
    스유
    SwiftUI
    spritekit
    composable architecture
    Protocol
    cs
    운영체제
    ReactorKit
    TCA
    후기
    widget
    백준
    c++
    문법
    대외활동
    스위프트
    Swift
    widgetkit
    영남대
    멋쟁이사자처럼
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진ddang
SwiftUI) animation(애니메이션), withAnimation이란, 사용하는 방법
상단으로

티스토리툴바