Moim prostym celem jest zanikanie animowanych funkcji ukrywania i pokazywania.
Button.hidden = YES;
Wystarczająco proste. Czy można jednak sprawić, że zniknie, a nie zniknie? W ten sposób wygląda to raczej nieprofesjonalnie.
źródło
Moim prostym celem jest zanikanie animowanych funkcji ukrywania i pokazywania.
Button.hidden = YES;
Wystarczająco proste. Czy można jednak sprawić, że zniknie, a nie zniknie? W ten sposób wygląda to raczej nieprofesjonalnie.
W systemie iOS 4 i nowszych można to zrobić po prostu przy użyciu metody przejścia UIView bez konieczności importowania QuartzCore. Możesz po prostu powiedzieć:
[UIView transitionWithView:button
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
button.hidden = YES;
}
completion:NULL];
UIView.transition(with: button, duration: 0.4,
options: .transitionCrossDissolve,
animations: {
button.hidden = false
})
Rozwiązanie Michail zadziała, ale tak naprawdę nie jest to najlepsze podejście.
Problem z zanikaniem alfa polega na tym, że czasami różne nakładające się warstwy widoku wyglądają dziwnie, gdy zanikają. Istnieje kilka innych możliwości korzystania z Core Animation. Najpierw umieść strukturę QuartzCore w swojej aplikacji i dodaj #import <QuartzCore/QuartzCore.h>
do nagłówka. Teraz możesz wykonać jedną z następujących czynności:
1) ustaw, button.layer.shouldRasterize = YES;
a następnie użyj kodu animacji alfa, który podał Michail w swojej odpowiedzi. Zapobiegnie to dziwnemu mieszaniu się warstw, ale ma niewielki spadek wydajności i może sprawić, że przycisk będzie wyglądał na rozmazany, jeśli nie jest dokładnie wyrównany na granicy pikseli.
Alternatywnie:
2) Zamiast tego użyj następującego kodu, aby animować zanikanie:
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];
button.hidden = YES;
Zaletą tego podejścia jest to, że możesz przenikać dowolną właściwość przycisku, nawet jeśli nie można jej animować (np. Tekst lub obraz przycisku), po prostu skonfiguruj przejście, a następnie ustaw swoje właściwości.
transitionWithView
parametru, aby zapewnić pomyślne włączanie i wyłączanie.Animowane właściwości UIView to:
isHidden
nie jest jednym z nich, więc jak to widzę najlepiej jest:Swift 4:
Cel C:
źródło
Aby zniknąć:
Cel C
Szybki 2
Swift 3, 4, 5
Aby wprowadzić:
Cel C
Szybki 2
Swift 3, 4, 5
źródło
Używam tego małego rozszerzenia Swift 3 :
źródło
Szybki 3
źródło
szybki 4.2
z rozszerzeniem:
prosta metoda:
źródło
Użyj tego rozwiązania, aby uzyskać płynne efekty zanikania i zanikania
użycie jest jak podobne
Dzięki
źródło
fadeOut
działa na iOS 13 tylko wtedy, gdy usunę ustawione linieself.isHidden
.I stworzył kategorię
UIView
do tego celu i wdrożony specjalny nieco inną koncepcję:visibility
. Główną różnicą w moim rozwiązaniu jest to, że możesz zadzwonić[view setVisible:NO animated:YES]
i zaraz po tym synchronicznie sprawdzić[view visible]
i uzyskać poprawny wynik. Jest to dość proste, ale niezwykle przydatne.Poza tym dozwolone jest unikanie stosowania „negatywnej logiki boolowskiej” (zobacz Code Complete, strona 269, Użyj dodatnich nazw zmiennych boolowskich, aby uzyskać więcej informacji).
Szybki
UIView+Visibility.swift
Cel C
UIView+Visibility.h
UIView+Visibility.m
źródło
kod @Umair Afzal działa dobrze w Swift 5 po pewnych zmianach
do użycia
źródło
Szybki 4
Aby z niego skorzystać, po prostu wywołaj te funkcje, takie jak:
źródło
isHidden
jest wartością natychmiastową i nie możesz wpłynąć na animację na niej, zamiast tego możesz użyć Alpha do ukrycia widokuI za pokazanie:
źródło
Możesz to BARDZO łatwo zrobić używając biblioteki Animatics :
źródło
źródło
Możesz tego spróbować.
I podaj nazwę swojego widoku
źródło
Jeśli twój widok jest domyślnie ustawiony na ukryty lub zmienisz stan Ukryty, który myślę, że powinieneś w wielu przypadkach, to żadne z podejść na tej stronie nie da ci animacji FadeIn / FadeOut, animuje tylko jeden z tych stanów, powodem jest to, że ustawiasz stan Hidden na false przed wywołaniem metody UIView.animate , która spowoduje nagłą widoczność i jeśli animujesz tylko alfa, przestrzeń obiektu nadal istnieje, ale nie jest widoczna, co spowoduje pewne problemy z interfejsem użytkownika.
Najlepszym podejściem jest więc najpierw sprawdzenie, czy widok jest ukryty, a następnie ustawienie alfa na 0,0, w ten sposób, gdy ustawisz stan Ukryty na fałsz, nie zobaczysz nagłej widoczności.
źródło
UIView.transition (z :) funkcja jest ładna i schludna.
Wielu to opublikowało, ale nikt nie zauważył, że błąd pojawi się dopiero po uruchomieniu.
Możesz perfekcyjnie zmienić ukrytą właściwość na true, podczas gdy gdy spróbujesz zmienić ją na false, widok po prostu nagle zniknie bez żadnej animacji.
Dzieje się tak, ponieważ ten interfejs API działa tylko w widoku, co oznacza, że po przejściu widoku do pokazania, w rzeczywistości sam pokazuje natychmiast, tylko jego zawartość jest animowana stopniowo.
Kiedy próbujesz ukryć ten widok, sam się ukryje od razu, sprawia, że animacja jest bez znaczenia.
Aby rozwiązać ten problem, podczas ukrywania widoku celem przejścia powinien być jego widok nadrzędny, a nie widok, który chcesz ukryć.
źródło
Moje rozwiązanie dla Swift 3 . Stworzyłem więc funkcję, która ukrywa / odkrywa widok we właściwej kolejności (podczas ukrycia - ustaw alfa na 0, a potem isHidden na true; odkrywanie - najpierw odsłoń widok, a potem ustaw jego alfa na 1):
źródło
completion
bloku jest inna animacja, kiedyhide
jest fałszywa?Swift 4 Transition
Jeśli zastosujesz podejście do starszych wersji Swift, pojawi się błąd:
Przydatne odniesienia .
źródło
isHidden
wartość staje się natychmiast (tj natychmiast ukrywanie / pokazywanie widoku).źródło
Wypróbowałem niektóre z opuszczonych odpowiedzi, niektóre działają tylko w jednej sytuacji, a niektóre z nich wymagają dodania dwóch funkcji.
opcja 1
Nie ma z tym nic wspólnego
view.isHidden
.Następnie przejdź
isFadeIn
(true
lubfalse
)Opcja 2
Nie przekazuj żadnego parametru. Zanika lub zanika zgodnie z
isUserInteractionEnabled
. To również bardzo dobrze pasuje do sytuacji, w której animowane są tam iz powrotem.Wtedy dzwonisz
Otóż to. Kosztuje mnie kiedyś, mam nadzieję, że to komuś pomoże.
źródło