-2.5 C
New York
Wednesday, January 8, 2025

swift – I need to animate on scroll, SwiftUI, iOS 18


I need to animate blur and opacity whereas a Verse seems when scrolled up, and disappear the identical method. Perhaps I may use .scrollTargetLayout() and .scrollTargetVisibilityChange()

struct VersesView: View {
let chapterNumber: Int
let language: String

@ObservedObject var versesViewModel: VersesViewModel
@State non-public var visibleVerses = [Verse]()

var physique: some View {
    VStack {
        if versesViewModel.isLoading {
            ProgressView("Loading verses...")
                .padding()
        } else if let errorMessage = versesViewModel.errorMessage {
            VStack(spacing: 16) {
                Textual content(errorMessage)
                    .foregroundColor(Shade(UIColor.label))
                    .multilineTextAlignment(.middle)
            }
            .padding()
        } else {
            // Show verses
            VStack(alignment: .main, spacing: 16) {
                ForEach(versesViewModel.verses) { verse in
                    VerseView(verse: verse, language: language)
                }
            }    
        }
    }
    .navigationTitle("Chapter (chapterNumber)")
    .navigationBarTitleDisplayMode(.inline)
    .onAppear {
        versesViewModel.fetchChapterData(chapterNumber: chapterNumber)
    }
}

}

struct VerseView: View {
let verse: Verse
let language: String

var physique: some View {
    VStack(alignment: .main, spacing: 6) {
        if language.lowercased() == "english" {
            Textual content("Verse (Funcs.formattedChapterNumber(numb: verse.verse_number))")
                .font(.headline)
        } else {
            Textual content("छंद (Funcs.formattedChapterNumber(numb: verse.verse_number))")
                .font(.headline)
        }
        
        // Translation Logic Built-in Immediately
        Group {
            if let translations = verse.translations {
                if language.lowercased() == "hindi" {
                    // Try to seek out the Hindi writer’s translation
                    if let targetTranslation = translations.first(the place: { $0.author_name == "Swami Tejomayananda" }) {
                        // Present that writer’s translation
                        Textual content(targetTranslation.description ?? "")
                            .font(.physique)
                    }
                    // Fallback to the primary out there translation
                    else if let firstTranslation = translations.first {
                        Textual content(firstTranslation.description ?? "")
                            .font(.physique)
                    } else {
                        // If no translations can be found, fallback to verse.textual content
                        Textual content(verse.textual content)
                            .font(.physique)
                    }
                } else {
                    // Default to English writer’s translation
                    if let targetTranslation = translations.first(the place: { $0.author_name == "Swami Sivananda" }) {
                        // Present that writer’s translation
                        Textual content(targetTranslation.description ?? "")
                            .font(.physique)
                    }
                    // Fallback to the primary out there translation
                    else if let firstTranslation = translations.first {
                        Textual content(firstTranslation.description ?? "")
                            .font(.physique)
                    } else {
                        // If no translations can be found, fallback to verse.textual content
                        Textual content(verse.textual content)
                            .font(.physique)
                    }
                }
            } else {
                // If verse.translations is nil, fallback to verse.textual content
                Textual content(verse.textual content)
                    .font(.physique)
            }
        }
    }
    .padding(.backside, 64)
}

}

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles