restricciones olvide modo incognito espaƱa eliminar desvincular desactivar como codigo apple iphone cocoa-touch uikit uiviewcontroller

olvide - modo incognito safari iphone



Deshabilitar el autorroteo para una sola UIView (4)

Hay otro trabajo alrededor del que he pensado ...

Puedes usar:

bgView.transform = CGAffineTransformMakeRotate(angle);

Debe calcular el ángulo de acuerdo con la orientación (podría ser M_PI / 2, M_PI o 3 * M_PI / 2) ...

Puede usar esta función dentro de - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration y también envolverlo con una animación que se animará durante la duración exacta como animación de orientación de pantalla:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { // Decide what will be the angle... // Make the animation [UIView beginAnimations:@"orientationChange" context:nil]; [UIView setAnimationDuration: duration]; bgView.transform = CGAffineTransformMakeRotate(angle); [UIView commitAnimations]; }

Tenga en cuenta que el tamaño de la vista puede cambiar debido a la barra superior ...

Tenga en cuenta también que nunca lo intenté yo mismo ...

De acuerdo, parece que debería ser relativamente simple, pero he estado buscando en Google durante casi una hora, y parece que no puedo encontrar lo que necesito.

Tengo un controlador de vista que tiene algunas partes diferentes: una vista de fondo, una vista de encabezado y algunos botones. Ahora, quiero que el encabezado y los botones se autorrroten correctamente (lo hacen, cuando devuelvo SÍ desde shouldAutorotateToInterfaceOrientation :), pero bajo ninguna circunstancia debe girar la vista de fondo. ¿Hay una forma adecuada de hacer esto?


No sé de una manera "adecuada", pero una solución alternativa es crear la imagen de fondo en ambas orientaciones y simplemente cambiar la vista de fondo. Buena pregunta, sin embargo, estará interesado en ver qué solución ofrecen las personas.


Si no desea rotaciones temporales de la vista de fondo después de la cual se cambió el fondo para que tenga la orientación correcta, deberá desactivar Autorrotación para la Vista. No hay dos maneras de hacerlo.

Debería manejar la rotación de los botones usted mismo. Puede hacer un diseño agradable o ponerlos, por ejemplo, en una vista de desplazamiento y simplemente cambiar el tamaño de eso.

De cualquier manera, necesitaría agregar un observador para rotarlo usted mismo,

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];

Y en didRotate puedes hacer el cambio de tamaño, con una agradable transición animada, si quieres.

- (void) didRotate:(NSNotification *)notification { int ori=1; UIDeviceOrientation currOri = [[UIDevice currentDevice] orientation]; if ((currOri == UIDeviceOrientationLandscapeLeft) || (currOri == UIDeviceOrientationLandscapeRight)) ori=0; }

Espero que eso te califique. Si las barras de navegación o las barras de estado hacen que la Vista se esconda debajo de la barra superior, hay formas de solucionarlo.


Hay una manera ''adecuada'': Permitir que el marco rote la interfaz (de lo contrario, se ejecutará en los problemas al abrir otro controlador de vista), pero anulará la animación de su vista.

Tengo una vista de pantalla completa que contiene todo lo que no quiero rotar, llamado _fixedView. En el guión gráfico me aseguré de que todos los autosizing (esas flechas rojas en el ''Inspector de tamaño'') estén apagados, por lo que la vista siempre estará en el centro de la pantalla.

Entonces en mi controlador de vista tengo esta anulación:

-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [UIView animateWithDuration:duration animations:^{ if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { _fixedView.transform = CGAffineTransformMakeRotation(M_PI_2); } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { _fixedView.transform = CGAffineTransformMakeRotation(-M_PI_2); } else if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { _fixedView.transform = CGAffineTransformMakeRotation(M_PI); } else { _fixedView.transform = CGAffineTransformIdentity; }}]; }

De esta forma, todo en _fixedView está completamente reparado (¿cómo es eso para los nombres descriptivos, eh?) Mientras que la barra de estado y mi barra de herramientas giran normalmente.