iphone - applicationWillResignActive y setBrightness no funcionan?
ios delegates (6)
¿Ha intentado registrar su controlador de vista principal (o cualquier otro objeto) para la UIApplicationWillResignActiveNotification
que se envía después de ejecutar applicationWillResignActive
?
Esto le dará la oportunidad de modificar el brillo fuera de applicationWillResignActive
. No sé si este método hace alguna diferencia, pero intentarlo debería ser fácil.
Simplemente llame:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResign) name:UIApplicationWillResignActiveNotification object:nil];
entonces define:
- (void)appWillResign {
[[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:sysBright];
}
Uso [[UIScreen mainScreen] setBrightness:] (en sdk 5.0) para cambiar la luz de fondo del sistema en mi aplicación.
Los siguientes pasos funcionan con mi aplicación:
Active la aplicación, obtenga el brillo del sistema como predeterminado y luego guárdelo como sysBright.
Cambie el brillo con mi aplicación, cambie el brillo, luego guárdelo como appBright.
La aplicación ResignActive con el botón de inicio o el botón de bloqueo, establece el brillo en sysBright (valor del paso 1, brillo predeterminado del sistema).
Aplicación activa de nuevo. Luego repetirá los pasos anteriores del 1 al 3.
Algo está mal con el paso 3, cuando desactivo la aplicación con el botón de bloqueo, la función applicationWillResignActive funciona bien, puede restaurar el valor de brillo (sysBright).
Pero cuando presiono el botón de inicio, ya no funciona. El brillo sigue siendo el valor que cambié en mi aplicación. (appBright)
¿Alguien tiene alguna idea al respecto? Gracias por cualquier ayuda ~
Aquí está el código:
float appBright,sysBright;
- (void)applicationDidBecomeActive:(UIApplication *)application
{
sysBright = [[UIScreen mainScreen] brightness];
[[NSUserDefaults standardUserDefaults] setFloat:sysBright forKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:appBright];
}
//doesn''t work when i ResignActive with the home button
- (void)applicationWillResignActive:(UIApplication *)application
{
[[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:sysBright];
}
¿Me estoy perdiendo de algo?
Cuando toca el botón de inicio, su aplicación no se activa, sino que pasa al "Modo de fondo" y tiene su propio método de delegado que debe definir:
- (void)applicationDidEnterBackground:(UIApplication *)application
Algo como esto (además del método applicationDidBecomeActive:
delegate) debería obtener el comportamiento deseado:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:sysBright];
}
Dado que los métodos actuales no funcionan en los métodos de delegado de aplicaciones, puede utilizar una vista UIV según lo descrito por Adam.
Haga un UView lvar en el archivo delegado h:
UIView *view_;
Luego en la implementación:
// create view in app delegate didFinishLaunchingWithOptions method and add it to the window
view_ = [[UIView alloc] initWithFrame:self.window.frame]; // delegate lvar
[view_ setBackgroundColor:[UIColor blackColor]];
[view_ setAlpha:0.5];
[self.window addSubview:view_];
[self.window makeKeyAndVisible];
return YES;
Haga que la vista tenga el tamaño de su pantalla o vea el controlador según sea necesario. y asegúrese de que está encima de todas las demás subvistas.
Tenga en cuenta que esto tendrá un efecto significativo en el rendimiento gráfico de la aplicación, pero a menos que esté haciendo algo loco con la interfaz de usuario, debería estar bien.
De la segunda a la última línea, no asignó la variable sysBright.
sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:sysBright];
Respondí una pregunta similar aquí: IOS5 setBrightness no funcionó con applicationWillResignActive
iOS no está destinado a retener los valores de brillo en la aplicación . Debe restaurar el valor del sistema después de que la aplicación renuncie a activarse, se cierre, se caiga, etc. Por lo tanto, oficialmente no hay necesidad de hacerlo en applicationWillResignActive.
Pero no funciona. Es un bicho De hecho, funciona si intentas cambiar a otra aplicación. Intenta presionar el botón Inicio dos veces y tu brillo desaparece.
No pierdas el tiempo, solo presenta un informe de error a Apple (lo hice bien).
La pantalla de desbloqueo restaura el brillo predeterminado del sistema. Solo presione el botón de Encendido dos veces y desbloquee para restaurar el brillo original.
ACTUALIZACIÓN: Mi informe de error se cerró porque, según Apple, no es un error. Es raro.
llamaste sincronizar?
[[NSUserDefaults standardUserDefaults] synchronize];