iOS 14부터, SwiftUI에서는 AnimatableModifier 프로토콜을 사용하여 사용자 지정 애니메이션 변형을 만들 수 있습니다. AnimatableModifier는 뷰의 레이아웃, 애니메이션 및 상호 작용을 변경하기 위해 사용됩니다.
AnimatableModifier의 기본 구조
AnimatableModifier 프로토콜은 다음과 같이 정의됩니다.
protocol AnimatableModifier : Animatable, ViewModifier {
associatedtype Body : View
var animatableData: Self.AnimatableData { get set }
func body(content: Self.Content) -> Self.Body
}
AnimatableModifier는 ViewModifier 프로토콜을 준수하며, animatableData 속성과 body(content:) 메서드를 구현해야 합니다. Animatable 프로토콜을 준수하므로, animatableData 속성은 애니메이션 가능한 데이터를 저장합니다.
AnimatableModifier로 사용자 지정 애니메이션 변형 생성하기
다음은 사용자 정의 애니메이션 변형을 구현하는 간단한 예제입니다.
struct ScaleTransform: AnimatableModifier {
var scale: CGFloat
var animatableData: CGFloat {
get { scale }
set { scale = newValue }
}
func body(content: Content) -> some View {
content.scaleEffect(scale)
}
}
위 코드에서 ScaleTransform은 AnimatableModifier 프로토콜을 준수하며, scale 속성을 사용하여 크기 변환을 지정합니다. animatableData 속성은 크기 변환에 대한 데이터를 저장하고, body(content:) 메서드는 변환을 수행합니다.
애니메이션과의 통합
AnimatableModifier를 사용하여 애니메이션을 수행하려면, withAnimation 함수를 호출하여 적용할 수 있습니다.
withAnimation {
self.scale = 1.5
}
애니메이션이 적용되는 동안 animatableData 속성의 값이 자동으로 변경되어 애니메이션 효과가 적용됩니다.
AnimatableModifier를 사용하면 SwiftUI에서 사용자 지정 애니메이션 변형을 쉽게 생성하고 적용할 수 있습니다.
더 많은 정보는 Apple 공식 문서를 참조하세요.