2012-09-29 12 views
12

Mam podklasę UICollectionViewLayout, która umieszcza komórki w kółko. Układ zwraca YES dla wywołania shouldInvalidateLayoutForBoundsChange:. Na obrotu, komórka w położeniu początkowym zanika i komórka w końcowej pozycji zanika w.Jaki jest najlepszy najlepszy sposób na wyłączenie przenikania krzyżowego na UICollectionView/UICollectionViewLayout zmienia się obrót lub ograniczenie?

Dodając następujący kod do mojego układu mogę wyłączyć zanika i pojawia się krąg zagadnień, które po prostu obracać ze zmianą orientacji:

- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    return nil; 
} 

- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    return [self layoutAttributesForItemAtIndexPath:itemIndexPath]; 
} 

Dlaczego metody sprawdzony na bounds zmian, ponieważ dokumentacja nie zdają się sugerować robią? Dokumentacja zdaje się wskazywać, że są one nazywane powiązanymi w celu wstawiania i usuwania elementów z widoku kolekcji.

Czy istnieje lepszy sposób na wyłączenie przenikania podczas obracania?

Uwagi:

  • initialLayoutAttributesForAppearingItemAtIndexPath: dokumentacja stwierdza, że ​​domyślnie metoda zwraca nil ale wzywa do super powrócił wartości niż zero.
  • ustawić symbolicznych punktów przerw na metodach UICollectionView deleteItemsAtIndexPaths:, moveItemAtIndexPath:toIndexPath: i insertItemsAtIndexPaths: i żaden z nich uderzył podczas obracania.
+0

To tylko ujęcie w ciemności, ale w celu wyłączenia animacji obrotu można całkowicie wyłączyć animację rdzenia dla operacji obracania: [Początek CATransaction]; [CATransaction setValue: (id) kCFBooleanFalse forKey: kCATransactionDisableActions]; // wykonaj obrót [Zatwierdzenie przesyłki z dostawą]; – maz

+0

Może, wewnętrznie na granicach, przedmioty zostaną usunięte i dodane, w wyniku czego zostaną wywołane metody. Co do tego dlaczego -deleteItemsAtIndexPaths: i -insertItemsAtIndexPaths: nie daj się wywołać .. nie ma pojęcia tutaj. Być może programista UIKit oszukał i uniknął interfejsu API, aby wykonać wstawianie i usuwanie? Nie bezprecedensowy. – maz

+1

Czy możesz wyłączyć niejawne animacje na warstwie nośnej widoku, używając czegoś podobnego do opisanego tutaj: http://stackoverflow.com/questions/2244147/disabling-implicit-animations-in-calayer-setneedsdisplayinrect/2244734#2244734? –

Odpowiedz

10

W UICollectionViewLayout.h stany plików

// This set of methods is called when the collection view undergoes an 
    animated transition such as a batch update block or an animated 
    bounds change. 
// For each element on screen before the invalidation, 
    finalLayoutAttributesForDisappearingXXX will be called and an 
    animation setup from what is on screen to those final attributes. 
// For each element on screen after the invalidation, 
    initialLayoutAttributesForAppearingXXX will be called an an 
    animation setup from those initial attributes to what ends up on 
    screen. 

który wyraźnie mówi, że nazywa się on granice zmian. Zamiast usuwania/wstawiania, "stary stan" i "nowy stan" wydają się bardziej dokładne.

Powiązane problemy