Utilizzando Xcode 4.2.1 iPad iOS 5.0.1, creare un nuovo progetto iPad "Vista singola". Nel controllore, aggiungere:Dopo la rotazione le coordinate di UIView vengono scambiate ma quelle di UIWindow no?
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
- (void) dumpView: (UIView *) view {
CGRect frame = view.frame ;
CGRect bounds = view.bounds ;
CGPoint center = view.center ;
NSLog(@"view [%@]:%d frame=%@ bounds=%@ center=%@"
, NSStringFromClass(view.class)
, [view hash]
, NSStringFromCGRect(frame)
, NSStringFromCGRect(bounds)
, NSStringFromCGPoint(center)) ;
}
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation {
NSLog(@"INViewController.didRotateFromInterfaceOrientation: %d to %d", fromInterfaceOrientation, self.interfaceOrientation) ;
[self dumpView: self.view] ;
[self dumpView: self.view.superview] ;
}
Run it, ruotare il dispositivo e si otterrà:
INViewController.didRotateFromInterfaceOrientation: 2 to 4
view [UIView] bounds={{0, 0}, {1024, 748}} center={394, 512}
view [UIWindow] bounds={{0, 0}, {768, 1024}} center={384, 512}
In altre parole, l'UIView ha le sue coordinate "scambiato a paesaggio" come previsto, ma la sua UIWindow genitore afferma ancora di essere in modalità verticale ...
Inoltre, la dimensione UIView sembra essere leggermente sbagliato: la coordinata y che dovrebbe essere a 20 è a 0 ...
Qualcuno sa wh in questo modo?
ha un senso. Grazie. Per inciso, grazie anche per avermi mostrato che gdb potrebbe essere effettivamente utilizzato in modo interattivo :-) – verec
@rob Tranne che i documenti di riferimento per UIView.frame dicono: Avviso Se la proprietà di trasformazione non è la trasformazione dell'identità, il valore di questa proprietà non è definito e quindi dovrebbe essere ignorato. Potresti approfondire? Supponiamo di voler animare la cornice di una vista ruotata per farla scorrere come una sovrapposizione. – tribalvibes
Non mi fido di 'frame' nel mio codice quando' transform' non è l'identità. Comunque, il metodo 'frame' sembra restituire sempre' [self convertRect: self.bounds toView: self.superview] 'e quindi è utile quando si esegue il debug. –