Animacje niejawne i jawne
Animowanie właściwości warstw za pomocą CABasicAnimation.
Animacje niejawne i jawne to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Dwa sposoby animowania warstw
Core Animation oferuje animacje niejawne (uruchamiane automatycznie po zmianie właściwości) oraz animacje jawne (w których tworzą Państwo obiekt animacji).
Znajomość obu sposobów oraz ich wzajemnego działania jest kluczowa dla płynnego ruchu.
Animacje niejawne
Zmiana właściwości warstwy animowalnej w warstwie niezależnej uruchamia animację niejawną z domyślną krzywą trwającą 0,25 s — obiekt animacji nie jest wymagany.
let layer = CALayer()
// Later, this animates automatically:
layer.opacity = 0.0Właściwości animowalne
Wiele właściwości warstwy można animować: opacity, position, bounds, backgroundColor, transform, cornerRadius i inne.
layer.cornerRadius = 20 // animates implicitly
layer.backgroundColor = UIColor.systemGreen.cgColorAkcje i mechanizm akcji
Animacje niejawne są sterowane przez akcje. Gdy właściwość ulega zmianie, warstwa wyszukuje akcję CAAction do uruchomienia. Można dostosować te akcje albo je wyłączyć.
Warstwy powiązane z widokami wyłączają animacje niejawne
Warstwy powiązane z obiektem UIView mają wyłączone animacje niejawne. Należy animować je za pomocą UIView.animate albo animacji jawnych.
UIView.animate(withDuration: 0.3) {
view.alpha = 0
}CABasicAnimation
CABasicAnimation animuje jedną właściwość między wartościami fromValue i toValue. Należy dodać ją do warstwy ze ścieżką klucza odpowiadającą właściwości.
let anim = CABasicAnimation(keyPath: "opacity")
anim.fromValue = 1.0
anim.toValue = 0.0
anim.duration = 0.5
layer.add(anim, forKey: "fade")Warstwa prezentacji a model
Animacja jawna zmienia tylko wartości warstwy prezentacji (wyświetlane na ekranie); wartość modelu warstwy powraca do poprzedniego stanu po zakończeniu animacji.
Aby zachować zmianę, należy ustawić również wartość modelu.
layer.opacity = 0.0 // set model value so it persists
layer.add(anim, forKey: "fade")Animacje klatkowe
CAKeyframeAnimation animuje wiele wartości values w czasie określonym przez keyTimes albo wzdłuż path — doskonale nadaje się do odbić lub ruchu po krzywych.
let move = CAKeyframeAnimation(keyPath: "position")
move.values = [
NSValue(cgPoint: CGPoint(x: 0, y: 0)),
NSValue(cgPoint: CGPoint(x: 100, y: 0)),
NSValue(cgPoint: CGPoint(x: 100, y: 100))
]
move.duration = 1.0
layer.add(move, forKey: "path")Funkcje synchronizacji
Przyspieszeniem można sterować za pomocą timingFunction: ease-in, ease-out, liniowej funkcji lub własnej krzywej Béziera.
anim.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)Grupowanie i transakcje
Wiele zmian można opakować w CATransaction, aby współdzieliły czas trwania i synchronizację, albo aby całkowicie wyłączyć animacje niejawne.
CATransaction.begin()
CATransaction.setDisableActions(true)
layer.position = CGPoint(x: 200, y: 200)
CATransaction.commit()Delegaty animacji i zakończenie
Należy ustawić CATransaction.setCompletionBlock albo delegata animacji, aby uruchomić kod po zakończeniu ruchu — na przykład w celu posprzątania, połączenia animacji lub aktualizacji stanu.
CATransaction.begin()
CATransaction.setCompletionBlock { print("done") }
layer.add(anim, forKey: "fade")
CATransaction.commit()Szybki test: animacje
Proszę sprawdzić swoją wiedzę na temat animacji niejawnych i jawnych.
Podsumowanie: animacje niejawne i jawne
Niezależne warstwy animują się niejawnie za pośrednictwem akcji po zmianie animowalnych właściwości; warstwy powiązane z widokami wyłączają ten mechanizm i korzystają z UIView.animate. Jawne animacje CABasicAnimation i CAKeyframeAnimation animują wartość prezentacji, dlatego aby zachować rezultat, należy zaktualizować również wartość modelu.
Ruchem można sterować za pomocą funkcji synchronizacji, grupować zmiany w CATransaction oraz używać bloków końcowych do wykonywania kolejnych operacji.
Często zadawane pytania
Czy lekcja „Animacje niejawne i jawne” jest bezpłatna?
Tak — pełny tekst „Animacje niejawne i jawne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Animacje niejawne i jawne”?
Animowanie właściwości warstw za pomocą CABasicAnimation. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Animacje niejawne i jawne”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy CALayer
- Animacje niejawne i jawne
- Przekształcenia i efekty 3D
- Niestandardowe rysowanie za pomocą Core Graphics