애니메이션의 스택

내용을 시작하기 앞서 기존에 배웠던 두 가지 내용을 복습했다.

  • 수정자의 순서가 중요하다: 순서에 따라 뷰가 표시되는 방식이 다르다.
  • 뷰에 .animation() 수정자를 사용하여 암시적 애니메이션을 적용할 수 있다.

애니메이션 또한 수정자를 여러번 사용할 수 있으며, 사용하는 순서에 따라 애니메이션이 적용되는 범위가 다르다.

  1. 적용 범위
.frame(width: 200, height: 200)
.background(enabled ? .blue : .red)
.foregroundStyle(.white)
.clipShape(.rect(cornerRadius: enabled ? 60 : 0))
.animation(.default, value: enabled)
.frame(width: 200, height: 200)
.background(enabled ? .blue : .red)
.animation(.default, value: enabled)
.foregroundStyle(.white)
.clipShape(.rect(cornerRadius: enabled ? 60 : 0))

첫번째 코드는 수정자 맨 뒤에 애니메이션 수정자가 있는 경우이고,
두번째 코드는 코드 중간에 수정자가 적용되어 있다.

애니메이션 수정자의 위쪽으로 수정자에 애니메이션이 적용되는 범위이다.

  1. 다중 사용

애니메이션 수정자를 여러번 사용할 수 있으며, 적용 범위는 애니메이션 수정자의 위쪽이다.

제스처에 애니메이션 적용하기

탭, 드래그, 스와이프 등의 제스처를 화면에서 읽어들여 처리하는 Gesture 프로토콜이 있다.
여기서는 간단하게 DragGesture()만 소개했다.

.gesture() 수정자를 사용하여 뷰에 제스처 동작을 붙일 수 있다.

.gesture(
    DragGesture()
        .onChanged {dragAmount = $0.translation}
        .onEnded {_ in dragAmount = .zero}

)


ViewModifier를 사용한 사용자 정의 트랜지션

카테고리:

업데이트: