Не работает анимация, как исправить. SwiftUI

swift

#1

Моя задача сделать анимацию появления картинок из-за границ экрана, чтобы они “прилетали” из одной точки к месту своего расположения на экране. Для этого я сделал модификатор с анимированным значением, который осуществляет перемещение для каждой картинки. Но проблема в том, что при запуске приложения все картинки находятся сразу на своих местах и никакой анимации не случается. Я недавно начал изучать анимации в Swift и не могу разобраться что делаю неправильно.

Модификатор:

struct Flyingfy: GeometryEffect {

    var endPoint: CGPoint
    // анимируемые свойства
    var offsetX: CGFloat
    var offsetY: CGFloat
    
    var animatableData: AnimatablePair<CGFloat, CGFloat> {
        get {
            return AnimatablePair<CGFloat, CGFloat>(offsetX, offsetY)
        }
        set {
            offsetX = newValue.first
            offsetY = newValue.second
        }
    }

    func effectValue(size: CGSize) -> ProjectionTransform {
        return ProjectionTransform(CGAffineTransform(a: 1, b: 0, c: 0, d: 1,
                                                     tx: offsetX,
                                                     ty: offsetY))
    }
    
    init(startPoint: CGPoint, endPoint: CGPoint) {
        self.endPoint = endPoint
        // все расстояние которое необходимо преодолеть по каждой из осей
        self.offsetX = endPoint.x + abs(startPoint.x)
        self.offsetY = endPoint.y + abs(startPoint.y)
    }
}

extension View {
    func flying(startPoint: CGPoint, endPoint: CGPoint) -> some View {
        self.modifier(Flyingfy(startPoint: startPoint, endPoint: endPoint))
    }
}

И возвращаю такое view

        // точка откуда картинка начинает свой путь
        let pointA = CGPoint(x: -50, y: -50) // значения отрицательные чтобы картинка "прилетела" из-за экрана
        // точка куда картинка должна попасть в итоге
        let pointB = viewLocationPoint
        return viewForItem(item)
                .frame(width: layout.itemSize.width,
                       height: layout.itemSize.height)
                .aspectRatio(3/2, contentMode: .fill)
                // помещаем картинку в начальную точку
                .position(x: pointA.x, y: pointA.y)
                // смещаем с помощью модификатора
                .flying(startPoint: pointA, endPoint: pointB)
                .animation(.easeInOut(duration: 2))

Вот что получается при запуске, картинки появляются без анимации сразу на своих местах