Mam na myśli rzeczy takie jak insertItemsAtIndexPaths
lub moveItemAtIndexPath:toIndexPath:
. Próbowałem owijać go w blok animacji, ale to nie zadziałało. Wygląda na to, że animacje utknęły w .25 lub .3 sekundy, ale chciałbym to zwolnić. Poza samodzielnym wdrożeniem ruchu, co nie jest warte problemów, czy ktoś wie, czy jest to możliwe z publicznymi API?Czy istnieje sposób zmiany szybkości animacji dla UICollectionViews?
Odpowiedz
Absolutnie! Ale nie możesz tego zrobić poprawnie, używając bloków animacji. Musisz zagłębić się w Core Animation.
Widok kolekcji ułatwia dodanie animacji do obiektu CALayer
, który tworzy kopię zapasową każdego UICollectionViewCell
. Jeśli jednak zaimplementujesz własny układ (lub podklasę istniejącego), możesz wykonać wszystkie niezbędne modyfikacje tych animacji w metodzie finalizeCollectionViewUpdates
.
Z dokumentacji UICollectionViewLayout
klasy:
kolekcji widok wywoła tę metodę, jako ostatni etap przed poprzedzającym animować żadnych zmian na swoim miejscu.
Oto przykład, w jaki sposób zastąpić animację domyślnej pozycji z własnych:
- (void)finalizeCollectionViewUpdates
{
for (UICollectionViewCell *cell in [self.collectionView visibleCells])
{
CAAnimation *positionAnimation = [cell.layer animationForKey:@"position"];
if (positionAnimation)
{
[cell.layer removeAnimationForKey:@"position"];
CALayer *presentationLayer = cell.layer.presentationLayer;
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setFromValue:[NSValue valueWithCGPoint:presentationLayer.position]];
[animation setToValue:[NSValue valueWithCGPoint:cell.layer.position]];
[animation setDuration:0.4];
[cell.layer addAnimation:animation forKey:@"position"];
}
}
}
Spójrz metod związanych z animacją-on CALayer
aby zobaczyć, jak można kopać w co animacje są aktualnie uruchomione na twojej warstwie.
Korzystając z tego podejścia, można nawet uzyskać kreatywność i dodać efekty przeregulowania/odbijania przy użyciu CAKeyframeAnimation
lub cokolwiek innego, co można wymyślić. Można również wykonywać pewne czynności, takie jak selektywne wyłączanie niektórych animacji (takich jak rozmiar) i utrzymywanie innych (np. Pozycja).
Kopiowanie ten nad stąd: https://stackoverflow.com/a/18392148/1751266
można zmieniać dowolną prędkość animacji z CALayer. Więc dla UICollectionView ten wygląda następująco:
[self.collectionView.viewForBaselineLayout.layer setSpeed:0.1f];
I można przywrócić pierwotną prędkość:
[self.collectionView.viewForBaselineLayout.layer setSpeed:1.0f];
Aby to działało może trzeba importować QuartzCore:
#import <QuartzCore/QuartzCore.h>
Pamiętaj tylko, że ma wpływ na inne animacje na tej samej warstwie, w tym animowane UIImageViews i takie, które mogą wymagać kompensacji.
- 1. Czy istnieje sposób wyłączenia animacji pokazu/ukrywania ActionBar?
- 2. Czy istnieje sposób kontrolowania animacji na UITableView scrollToRowAtIndexPath?
- 3. Czy istnieje sposób zmiany nazwy zmiennej kątowej w widoku?
- 4. Czy istnieje sposób zmiany pozycji tekstu w UITabBar lub UITabBarItem?
- 5. Czy istnieje sposób zmiany paska adresu przeglądarki bez odświeżania strony?
- 6. Czy istnieje sposób zmiany akcji usuwania na istniejącej instancji shared_ptr
- 7. Korzystanie z Core Animation, czy istnieje sposób grupowania animacji dla kilku CALayerów?
- 8. Czy istnieje sposób przetestowania zmiennej dla "isForEachable"
- 9. Czy istnieje sposób użycia STOMP dla iOS
- 10. Czy istnieje sposób zmiany czcionek i kolorów dla interaktywnego okna C# w Roslyn CTP?
- 11. Czy istnieje sposób sprawdzenia, czy próbka została skonfigurowana dla członka?
- 12. Zwiększenie szybkości skanowania WiFi
- 13. Przerysowywanie liczb Seaborn dla animacji
- 14. Zmienność szybkości wstawiania SQL
- 15. Czy istnieje sposób na wykrycie, czy zmiany w oddziale zostały pośrednio połączone z innym?
- 16. Przeciągnij i upuść między dwoma UICollectionViews
- 17. Czy istnieje sposób, aby dowiedzieć się, ile stopni widok jest obecnie obracany podczas animacji?
- 18. Android TextView: czy istnieje sposób na wymuszenie animacji markiz z krótkim tekstem?
- 19. UIScrollView scrollRectToVisible: animated: czy istnieje sposób, w jaki można wywołać metodę po zakończeniu animacji?
- 20. Vim: Zwiększanie szybkości przesuwania dokumentu
- 21. Czy możliwa jest zmiana szybkości znacznika HTML <marquee>?
- 22. Czy istnieje sposób zmiany czcionki używanej w oknie wyników testu VS2012?
- 23. czy istnieje alternatywa dla '#' + div_id?
- 24. Czy istnieje alternatywa dla śmierci?
- 25. Czy istnieje sposób użycia konstrukcji dla każdego stołu Guawy?
- 26. Czy istnieje sposób zabezpieczenia proxy/haseł dla konfiguracji Vagrant?
- 27. Czy istnieje sposób wyłączenia buforowania systemowego (unix) dla plików dyskowych?
- 28. Czy istnieje sposób na zamknięcie menu rozwijanego dla typeahead.js?
- 29. Czy istnieje sposób ustawiania i ikona aplikacji dla urządzeń Samsung?
- 30. Czy istnieje sposób definiowania powiązań klawiszy dla projektu?