IOS5 setBrightness не работает с приложением WillResignActive

Я использую [[UIScreen mainScreen]setBrightness: ] (в SDK 5.0), чтобы изменить фоновую подсветку системы в моем приложении.

Следующие шаги работают с моим приложением

  1. Активируйте приложение, получите яркость системы по умолчанию, затем сохраните как sysBright,

  2. Измените яркость с моим приложением, измените яркость, затем сохраните как appBright,

  3. Приложение ResignActive с кнопкой "Домой" или кнопкой блокировки, установите яркость на sysBright (шаг 1, системная яркость по умолчанию).

  4. Активное приложение снова. Затем он будет повторять вышеуказанные шаги с 1 по 3.

Что-то не так с шагом 3, когда я деактивирую приложение кнопкой блокировки, функция applicationWillResignActive хорошо работает, может восстановить значение яркости (sysBright).

Но когда я нажимаю кнопку домой, она больше не работает. Яркость - все еще значение, которое я изменил в своем приложении. (appBright)

У кого-нибудь есть идеи по этому поводу? Спасибо за любую помощь ~

Вот код:

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];        
}

4 ответа

iOS не предназначена для сохранения значений яркости в приложении. Он должен восстановить системное значение после того, как приложение уйдет в активное состояние, выйдет, выйдет из строя и т. Д. Официально нет необходимости делать это в applicationWillResignActive.

Но это не работает. Это ошибка. На самом деле это работает, если вы переключаетесь на другое приложение (дважды нажмите кнопку "Домой" и выберите другое приложение)

Не тратьте свое время, просто отправьте отчет об ошибке в Apple (у меня все получилось).

Разблокировка экрана восстанавливает яркость системы по умолчанию. Просто дважды нажмите кнопку питания и разблокируйте, чтобы восстановить исходную яркость.

Попробуй это...

- (void)applicationWillResignActive:(UIApplication *)application
{        
    CGFloat brightness = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:brightness];        
}

Согласно DevForum от Apple, это ошибка, которую Apple не хочет исправлять.

Бывают случаи, когда вам действительно нужно приостановить приложение (перевести его в фоновый режим, например, когда вы нажимаете кнопку "Домой") и сохранить яркость, ранее установленную на экране.

Пример. В настоящее время я работаю над подводным приложением (по научным причинам оно снимает фотографии с iPhone в водонепроницаемом чехле), и у нас нет доступа ко всему экрану устройства.

Подводный корпус включает в себя 3 механические "сенсорные" кнопки в очень специфических местах, и мы должны отключить функцию автоблокировки, потому что нет способа выполнить жест скольжения, чтобы разблокировать устройство.

Нам все еще нужен способ сохранить время автономной работы, когда приложение не используется, т.е. приостановить работу приложения и установить низкий уровень яркости экрана.

Решение, которое мы реализовали:

а) Мы говорим пользователю отключить автоматическую настройку яркости в настройках и отключить функцию автоматической блокировки

б) Мы превращаем Яркость в 100% на классе ApplicationDelegate:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Adjust Brightness to full
    [[UIScreen mainScreen] setBrightness:1.0];
}

c) Мы выполняем следующий код нажатием кнопки приложения, чтобы приложение перешло в фоновый режим (не потребляя циклов процессора), а яркость опустилась до более низкого возможного уровня (сохраните батарею):

[[UIScreen mainScreen] setBrightness:0.0]; // Set to low brightness
[[UIApplication sharedApplication] performSelector:@selector(suspend)]; // Simulate Home button

Я надеюсь, что это может быть полезно для кого-то.

PS: Руководства по интерфейсу Apple Human - это одно, а реальные потребности реальных приложений - это другое (вы не можете ничего предсказать или ограничить заранее).

Другие вопросы по тегам