Desidero aggiornare manualmente lodi un UIScrollView
durante le modifiche di rotazione. La vista a scorrimento riempie lo schermo e ha una larghezza flessibile e un'altezza flessibile.contentOffset di UIScrollView durante la rotazione
Attualmente sto cercando di aggiornare il contentOffset in willRotateToInterfaceOrientation
, in questo modo:
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[Utils logPoint:myScrollView.contentOffset tag:@"initial"];
myScrollView.contentOffset = CGPointMake(modifiedX, modifiedY);
[Utils logPoint:myScrollView.contentOffset tag:@"modified"];
}
-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[Utils logPoint:myScrollView.contentOffset tag:@"final"];
}
Tuttavia, il valore finale non è il valore modificato, e sembra un pò ad essere influenzato da esso, ma non è evidente per me come.
Questi sono alcuni dei risultati che ottengo:
initial: (146.000000;-266.000000)
modified: (81.000000;-108.000000)
final: (59.000000;-0.000000)
initial: (146.000000;-266.000000)
modified: (500.000000;500.000000)
final: (59.000000;500.000000)
initial: (146.000000;-266.000000)
modified: (-500.000000;-500.000000)
final: (-0.000000;-0.000000)
Come posso aggiornare il contentOffset di una vista di scorrimento durante un cambio di rotazione?
Hai provato cambiando la contentOffset in 'willAnimateRotationToInterfaceOrientation' invece? A questo punto dovrebbe essere presente un blocco di animazione, forse il risultato è diverso. – Pascal
@Pascal Sì, e funziona perfettamente. Comunque mi piacerebbe sapere perché non si comporta come previsto se lo cambio in willRotateToInterfaceOrientation. – hpique
La mia ipotesi sarebbe che il frame del genitore cambi solo ** dopo ** 'willRotateToInterfaceOrientation', quindi si imposta un contentOffset diverso, ma quello viene cambiato immediatamente di nuovo perché anche il frame della superview cambia solo in quel momento. Per il sistema operativo è come se aveste cambiato il frame qualche tempo prima, non rispetto alla rotazione in sospeso. – Pascal