Ho una sottoclasse di UICollectionViewLayout
che colloca le celle in una circonferenza. Il layout restituisce YES
per la chiamata shouldInvalidateLayoutForBoundsChange:
. Su la rotazione, la cella nella posizione iniziale svanisce e la cella nella posizione finale svanisce in.Qual è il miglior modo migliore per disabilitare le dissolvenze incrociate su UICollectionView/UICollectionViewLayout?
Aggiungendo il seguente codice per il mio layout posso disattivato le dissolvenze e il cerchio di elementi sembra semplicemente ruotare con il cambiamento dell'orientamento:
- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {
return nil;
}
- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {
return [self layoutAttributesForItemAtIndexPath:itemIndexPath];
}
perché i metodi vengono chiamati su un cambiamento limiti, perché la documentazione non lo fa sembra suggerire che fanno? La documentazione sembra indicare che vengono chiamati correlati all'inserimento e alla rimozione di elementi dalla vista di raccolta.
C'è un modo migliore per disattivare la dissolvenza incrociata durante la rotazione?
Note:
- Il
initialLayoutAttributesForAppearingItemAtIndexPath:
documentazione stati che di default il metodo restituiscenil
ma chiama asuper
restituito valori non zero. - ho impostare le interruzioni simbolici punti sui metodi UICollectionView
deleteItemsAtIndexPaths:
,moveItemAtIndexPath:toIndexPath:
einsertItemsAtIndexPaths:
e nessuno di loro sono colpiti durante la rotazione.
Questo è solo un salto nel buio, ma per la disabilitazione dell'animazione di rotazione, si potrebbe spegnere l'animazione di base del tutto per l'operazione di rotazione: [CATransaction iniziano]; [CATransaction setValue: (id) kCFBooleanFalse forKey: kCATransactionDisableActions]; // fai la tua rotazione [commit di CATransaction]; – maz
Forse, internamente su un limite, gli elementi vengono rimossi e aggiunti e di conseguenza vengono richiamati i metodi. Per quanto riguarda il perché -deleteItemsAtIndexPaths: and -insertItemsAtIndexPaths: non essere chiamato .. nessun indizio qui. Forse il programmatore UIKit ha imbrogliato ed evitato l'API per eseguire l'inserimento e l'eliminazione? Non senza precedenti. – maz
Potrebbe disabilitare le animazioni implicite sulla strato di rinforzo della vista usando qualcosa come descrivo qui: http://stackoverflow.com/questions/2244147/disabling-implicit-animations-in-calayer-setneedsdisplayinrect/2244734#2244734? –