[ios] AnimatableModifier와 애니메이션 변형

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
}

AnimatableModifierViewModifier 프로토콜을 준수하며, 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)
    }
}

위 코드에서 ScaleTransformAnimatableModifier 프로토콜을 준수하며, scale 속성을 사용하여 크기 변환을 지정합니다. animatableData 속성은 크기 변환에 대한 데이터를 저장하고, body(content:) 메서드는 변환을 수행합니다.

애니메이션과의 통합

AnimatableModifier를 사용하여 애니메이션을 수행하려면, withAnimation 함수를 호출하여 적용할 수 있습니다.

withAnimation {
    self.scale = 1.5
}

애니메이션이 적용되는 동안 animatableData 속성의 값이 자동으로 변경되어 애니메이션 효과가 적용됩니다.

AnimatableModifier를 사용하면 SwiftUI에서 사용자 지정 애니메이션 변형을 쉽게 생성하고 적용할 수 있습니다.

더 많은 정보는 Apple 공식 문서를 참조하세요.