Usando Xcode 4.2.1 iPad iOS 5.0.1, cree un nuevo proyecto iPad de "Vista única". En el controlador, añadir:Después de la rotación, ¿las coordenadas de UIView se intercambian pero las de 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] ;
}
ejecutarlo, girar el dispositivo y obtendrá:
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}
En otras palabras, el UIView tiene sus coordenadas "intercambiado con el paisaje" como se esperaba, pero su UIWindow padre todavía dice que está en el modo de retrato ...
Además, el tamaño UIView parece ser un poco mal: la coordenada y que debería estar en 20 a 0 ... es
Cualquiera sabe WH en este medio?
Tiene sentido. Gracias. Por cierto, gracias también por mostrarme que gdb podría usarse interactivamente :-) – verec
@rob Excepto que los documentos de referencia para UIView.frame dicen: Advertencia: si la propiedad de transformación no es la transformación de identidad, el valor de esta propiedad no está definido y por lo tanto debe ser ignorado. ¿Podrías profundizar en eso? Supongamos que quiero animar el marco de una vista girada para deslizarlo como una superposición. – tribalvibes
No confío en 'frame' en mi código cuando' transform' no es la identidad. Sin embargo, el método 'frame' parece siempre devolver' [self convertRect: self.bounds toView: self.superview] 'y así es útil cuando se depura. –