IOS5 setBrightness не работает с приложениемWillResignActive - PullRequest
10 голосов
/ 26 ноября 2011

Я использую [[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 ]

5 голосов
/ 22 апреля 2012

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

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

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

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

1 голос
/ 20 декабря 2011

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

- (void)applicationWillResignActive:(UIApplication *)application
{        
    CGFloat brightness = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:brightness];        
}
0 голосов
/ 07 мая 2014

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

0 голосов
/ 13 марта 2014

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

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

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

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

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

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

б) Превратим Яркость в 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 - это одно, а реальные потребности реальных приложений - это другое (вы не можете ничего предсказать или ограничить заранее).

...