no estoy seguro de que hay efectos secundarios extraños con esta implementación, pero trata de algo como esto y ver si funciona para usted:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
if (UIInterfaceOrientationIsPortrait(orientation)) {
[[NSBundle mainBundle] loadNibNamed:@"MenuView" owner:self options:nil];
if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
self.view.transform = CGAffineTransformMakeRotation(M_PI);
}
} else if (UIInterfaceOrientationIsLandscape(orientation)){
[[NSBundle mainBundle] loadNibNamed:@"MenuViewLandscape" owner:self options:nil];
if (orientation == UIInterfaceOrientationLandscapeLeft) {
self.view.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2);
} else {
self.view.transform = CGAffineTransformMakeRotation(M_PI_2);
}
}
}
Esto supone que el propietario del archivo en su MenuView y Los XIB de MenuViewLandscape están configurados en MenuViewController y también están configurados en ambos XIB. Todos los puntos de venta deben volver a conectarse correctamente en la rotación al usar loadNibNamed
.
Si usted está construyendo para iOS 4, también se podría reemplazar a los loadNibNamed
líneas con éstos:
UINib *nib = [UINib nibWithNibName:@"MenuView" bundle:nil];
UIView *portraitView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = portraitView;
y
UINib *nib = [UINib nibWithNibName:@"MenuViewLandscape" bundle:nil];
UIView *landscapeView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = landscapeView;
Estos asumen que la UIView que desea mostrar inmediatamente sigue el Los objetos proxy de Propietario de archivo y Primer Respondedor en los XIB.
Entonces sólo tiene que asegurarse de que los puntos de vista se rotan adecuadamente para la orientación de la interfaz. Para todas las vistas que no están en la orientación vertical predeterminada, rótelas estableciendo la propiedad transform
de la vista y usando CGAffineTransformMakeRotation()
con los valores apropiados como se muestra en el ejemplo anterior.
La rotación por sí sola podría resolver su problema sin la carga adicional de los NIB. Sin embargo, cargar una instancia completamente nueva de MenuViewController
y configurar su vista a la vista existente de MenuViewController
puede causar un comportamiento extraño con el ciclo de vida y los eventos de rotación, por lo que puede estar más seguro con los ejemplos anteriores. También le ahorran la molestia de tener que crear nuevas instancias MenuViewController
cuando solo necesita la vista desde allí.
Espero que esto ayude!
Justin
Ha habido suerte con esto? – RefuX
vea la respuesta a continuación –