Animate-Rahmen und layout-Veränderung der UICollectionView
Ich versuche einen Effekt zu erstellen wo ändere ich das layout meiner UICollectionView beim ändern der frame-Größe
Zunächst die collectionView layout präsentiert die "thumbnail" - Galerie-Stil voller Bildschirm.
Nach Größe des Rahmens, um einen dünnen Streifen - ich möchte einen "film-strip" - Stil layout
beide layouts unabhängig voneinander funktionieren gut und wie erwartet.
Versuchte ich code wie diesem:
[UIView animateWithDuration:1
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.collectionview.frame = newFrame; //animate the frame size
}
completion:^(BOOL finished) {
[self.collectionView.collectionViewLayout invalidateLayout];
[self.collectionView setCollectionViewLayout:filmstriplayout animated:YES]; //now set the new layout
}];
Aber es sieht sehr abgehackt und nicht Größenanpassung, als erwartet.
Gibt es eine Möglichkeit, wo ich konnte, der collectionview layout und die Größe des Frames gleichzeitig während der Animation ändern?
Hast du dir schon mal eine gute Lösung?
performBatchUpdates:withCompletion:
ist gut, aber hilft nicht mit, die Kombination eines animierten frame
oder contentOffset
ändern. Ich will diesen für reibungslos animieren zoom, bounce back, wo mein layout und die contentOffset
abhängig von zoom.InformationsquelleAutor Avner Barr | 2013-09-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nicht eine bestimmte Antwort, aber ein paar Anregungen zu berücksichtigen.
UICollectionView
nicht immer den Griff wechseln des Layouts Instanzen anmutig. Hier ist eine gute Diskussion des Problems und einige workarounds.Aber was habe ich eigentlich gemacht in der Praxis, die für mich gearbeitet wurde, um die Umsetzung von layouts in einem einzigen layout-Objekt, das weiß, wie man wechseln zwischen layout-Modi. Ich fand, dass der Wechsel layout-Modi in einem batch-update-block war weniger problematisch als die Verwendung
setCollectionViewLayout
mit zwei verschiedenen layout-Instanzen:performBatchUpdates:
?Ah, ich fand die Antwort hier: stackoverflow.com/a/12999613/129889
InformationsquelleAutor Timothy Moose
Legen Sie zunächst das raster-Element Größe wie
gridItemSize = CGSizeMake(98, 98);
führen Sie dann die batch-Aktion der UICollectionView. Die Elemente in der Sammlung anzeigen, ändern Ihre Größe mit animation. 🙂contentOffset
ändern? Ich brauche auch beide auf einmal passieren.InformationsquelleAutor Zulqarnain
Hier ist der einfache trick, wenn Sie die Aktualisierung der CollectionView diese:
InformationsquelleAutor Shivam Singh