Ich versuche, Änderungen der Schnittstellenausrichtung in einem UICollectionViewController zu verarbeiten. Ich versuche zu erreichen, dass ich nach einer Schnittstellenrotation das gleiche contentOffset haben möchte . Dies bedeutet, dass es entsprechend dem Verhältnis der Grenzwertänderung geändert werden sollte.
Beginnend im Hochformat mit einem Inhaltsoffset von { bounds.size.width * 2, 0}…
… Sollte zum Inhaltsversatz im Querformat auch mit { bounds.size.width * 2, 0} führen (und umgekehrt).
Das Berechnen des neuen Versatzes ist nicht das Problem, aber Sie wissen nicht, wo (oder wann) Sie ihn einstellen müssen, um eine reibungslose Animation zu erhalten. Was ich damit mache, ist das Ungültigmachen des Layouts in willRotateToInterfaceOrientation:duration:
und das Zurücksetzen des Inhaltsversatzes in didRotateFromInterfaceOrientation:
:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration;
{
self.scrollPositionBeforeRotation = CGPointMake(self.collectionView.contentOffset.x / self.collectionView.contentSize.width,
self.collectionView.contentOffset.y / self.collectionView.contentSize.height);
[self.collectionView.collectionViewLayout invalidateLayout];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
{
CGPoint newContentOffset = CGPointMake(self.scrollPositionBeforeRotation.x * self.collectionView.contentSize.width,
self.scrollPositionBeforeRotation.y * self.collectionView.contentSize.height);
[self.collectionView newContentOffset animated:YES];
}
Dies ändert den Inhaltsversatz nach der Drehung.
Wie kann ich es während der Rotation einstellen? Ich habe versucht, den neuen Inhaltsoffset einzustellen, willAnimateRotationToInterfaceOrientation:duration:
aber dies führt zu einem sehr seltsamen Verhalten.
Ein Beispiel finden Sie in meinem Projekt auf GitHub .