Stos głębi, który wyświetla elementy, w kolejności od początku do końca. Na przykład mając trzy elementy, które są takich samych rozmiarów, ten ostatni zostanie wyświetlony jako widoczny, a resztę przykryje.
Stos daje także możliwość na sposób wyświetlania elementów poprzez wyrównanie (ang.: alignment) oraz na ustawienie odstępów między elementami (ang.: spacing).
Wyrównanie
Jeśli chodzi o wyrównanie, użyj właściwości: alignment.
Przy czym, każdy stos przyjmuje własne wartości:
Dla VStack:
.leading — wyrówanie do lewej
.center — wyrównanie do środka (domyślna wartość)
.trailing — wyrównanie do prawej
VStack(alignment: .leading)
Dla HStack:
.top — umieszcza elementy na górze stosu
.bottom — umieszcza elementy na dole stosu
.center — umieszcza elementy na środku
HStack(alignment: .leading)
Dla ZStack:
Przyjmuje takie same wartości jak dla VStack i HStack, np: leading lub top
Lub kombinacje: topLeading, topTrailing, bottomLeading, bottomTrailing
Odstęp
Żeby ustawić odpowiedni odstęp między elementami stosu, użyj właściwości: spacing.
Ten wrapper służy do wymiany danych między wieloma widokami. Jest to szczególnie przydatne kiedy jeden widok składa się z wielu innych i na przykład do niektórych z nich musimy przekazać jakieś dane.
Przekazywanie danych z jednego widoku do drugiego, aż w końcu trafimy na ten, w którym te dane są potrzebne, staje się męczące. Ten problem rozwiązuje @EnvironmentObject.
Masz także gwarancję, że jeśli dane się zmienią, widok zostanie automatycznie o tym poinformowany.
Aby przejąć dane oznaczone przez @EnvironmentObject, będziesz musiał w widoku, który znajduje się wyżej w hierarchii wywołać metodę environmentObject i przekazać do niej obiekt, którym chcesz się dzielić z innymi widokami.
Najlepiej wszystko zobrazuje poniższy przykład.
Przykład
Mamy jeden model o nazwie Counter.
Trzy widoki w takiej hierarchii: ContentView -> InformationView -> CounterLabelView.
Widok CounterLabelView potrzebuje mieć dostęp do obiektu klasy Counter. Dlatego w tym widoku zostanie użyty @EnvironmentObject, aby przechwycić przesłane dane.
W widoku InformationView niepotrzebny jest obiekt klasy Counter. Zawiera on widok CounterLabelView.
W widoku głównym ContentView wywołujemy metodę environmentObject, żeby przekazać instancję klasy Counter do widoków potomnych.
Model:
import SwiftUI
classCounter: ObservableObject{
@Publishedvar value: Int = 0funcincrement() {
value += 1
}
funcdecrement() {
value -= 1
}
funcreset() {
value = 0
}
}
SwiftUI pozwala widokowi na pobranie informacji o urządzeniu. Na przykład: jaki motyw graficzny ma ustawiony na swoim telefonie: jasny czy ciemny? Jakiego język jest ustawiony na urządzeniu?
Pozyskując takie informacje, możesz wykorzystać je w swojej aplikacji.
Za pobranie informacji systemowych odpowiedzialny jest wrapper: @Environment.
Pełną listę informacji, jakie możesz pobrać znajdziesz w EnvironmentValues
W tym przykładzie za pomocą @Environment pobierana jest wartość z colorScheme, która zawiera informację, jaki motyw graficzny jest ustawiony w urządzeniu.
Na podstawie tego stylizowany jest odpowiednio przycisk.
Aplikacja napisana pod iOS może być w następującym stanie:
Non-running
Ten stan oznacza, że aplikacja nie jest uruchomiona.
Inactive
Oznacza, ze aplikacja jest uruchomiona na pierwszym planie (ang.: foreground), ale użytkownik nie ma z nią interakcji. Aplikacja w takim stanie nie odbiera zdarzeń.
Program wchodzi w ten stan na krótko przed przejściem do innego stanu na przykład w tryb background.
Przykład:
Użytkownika używa aplikacji i chce się przełączyć do innego programu — aplikacja najpierw wchodzi w tryb inactive, a następnie background.
Active
Aplikacja działa na pierwszym planie, użytkownik ma z nią interakcję i odbiera ona zdarzenia.
Background
Aplikacja jest wprawdzie uruchomiona, ale jest "schowana" - działa w tle. Użytkownik nie ma z nią interakcji. Kod aplikacji jest wykonywany.
W ten stan aplikacja przechodzi na przykład, gdy użytkownik przełącza się na inny program.
Suspended
Aplikacja jest uruchomiona w tle, ale jej kod nie jest wykonywany.