Zamiast tworzyć dwa UIImageViews
, logiczne wydaje się po prostu zmienić image
jeden widok. Jeśli to zrobię, czy w ogóle występuje zanikanie / krzyżowanie się między dwoma obrazami, a nie natychmiastowa zmiana?
ios
objective-c
swift
cocoa-touch
uiimageview
Josh Kahane
źródło
źródło
Odpowiedzi:
Edycja: poniżej jest lepsze rozwiązanie z @algal .
Innym sposobem jest użycie wstępnie zdefiniowanych przejść CAAnimation:
Zobacz przykładowy projekt View Transitions firmy Apple: https://developer.apple.com/library/content/samplecode/ViewTransitions/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007411
źródło
Korzystanie z nowych
UIKit animation
metod opartych na blokach może być znacznie prostsze .Załóżmy, że następujący kod znajduje się w kontrolerze widoku, a UIImageView, który chcesz rozwiązać krzyżowo, jest podwidokiem self.view adresowalnym za pośrednictwem właściwości.
self.imageView
Wtedy wszystko, czego potrzebujesz, to:Gotowe.
Aby to zrobić w Swift, wygląda to tak:
Swift 3, 4 i 5
źródło
Dla Swift 3.0.1:
Źródła: https://gist.github.com/licvido/bc22343cacfa3a8ccf88
źródło
Tak, to, co mówisz, jest całkowicie poprawne i to jest sposób na zrobienie tego. Napisałem tę metodę i zawsze używam jej do znikania obrazu. Zajmuję się
CALayer
tym. W tym celu musisz zaimportować główną animację.Możesz zrobić coś odwrotnego w przypadku zanikania obrazu. Po zniknięciu. Po prostu usuwasz to z superview (czyli
UIImageView
).[imageView removeFromSuperview]
.źródło
Możesz również spakować funkcję zanikania w podklasie, aby można ją było następnie użyć jako wspólnego UIImageView, jak w poniższym przykładzie:
Następuje możliwa implementacja.
Uwaga: sposób, w jaki faktycznie zaimplementujesz przejście
setImage:
funkcji, może się zmienić i może być jednym z innych doskonałych przykładów opisanych w innych odpowiedziach na to pytanie - tworzenie dodatkowego w locie,UIImageView
tak jak tutaj, może być niedopuszczalnym narzutem w twojej konkretnej sytuacji .IMMFadeImageView.h :
IMMFadeImageView.m :
Powyższy kod opiera się na kilku założeniach (w tym ARC jest włączony w twoim projekcie XCode), ma służyć jedynie jako dowód słuszności koncepcji iw interesie jasności i skupienia pozostaje aktualny, pomijając ważny, niepowiązany kod. Proszę, nie kopiuj i wklejaj na ślepo.
źródło
Potrzebowałem, aby przejście powtarzało się w nieskończoność. To wymagało DUŻO prób i błędów, ale w końcu uzyskałem efekt końcowy, którego szukałem. Są to fragmenty kodu służące do dodawania animacji obrazu do UIImageView w UITableViewCell.
Oto odpowiedni kod:
źródło
Po zabawie
UIView.transition()
i problemach z.transitionCrossDissolve
opcją (próbowałem animować obrazy zmieniające się w jednym UIImageView i przejście następowało natychmiast bez animacji) stwierdziłem, że wystarczy dodać jeszcze jedną opcję, która pozwala animować właściwości zmieniające się w widoku ( Swift 4.2 ):Ponadto: jeśli masz jakiekolwiek podwydy na swoim imageView, zostanie on również przerysowany i może to uniemożliwić animację. Na przykład miałem subview z rozmyciem na moim imageView iw takim przypadku animacja nie działa. Po prostu zmieniłem hierarchię widoku i przesunąłem rozmycie do własnego widoku i umieściłem go nad imageView.
źródło
Myślę, że to najkrótszy sposób na zrobienie tego. Utwórz animację UIView i zatwierdź ją w swoim imageView.
źródło
Korzystając z tej
highlightedImage
właściwości, można to nieco uprościć. Oto przykład w Swift 3. Najpierw ustaw zarówno normalny, jak i podświetlony obraz:A kiedy chcesz przełączać się między tymi animowanymi:
źródło