applicationWillResignActive и setBrightness не работают? - PullRequest
27 голосов
/ 29 ноября 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];        
}

Я что-то упустил?

Ответы [ 6 ]

11 голосов
/ 03 мая 2012

Я ответил на аналогичный вопрос здесь: IOS5 setBrightness не работал с приложениемWillResignActive

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

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

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

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

UPDATE: Мой отчет об ошибках был закрыт, потому что, по словам Apple, это не ошибка. Это странно.

1 голос
/ 11 февраля 2012

Вы пытались зарегистрировать свой контроллер основного вида (или любой другой объект) для UIApplicationWillResignActiveNotification, который отправляется после выполнения applicationWillResignActive?

Это даст вам возможность изменить яркость снаружиapplicationWillResignActive.Не знаю, если этот метод имеет какое-либо значение, но попробовать его должно быть легко.

Просто позвоните:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResign) name:UIApplicationWillResignActiveNotification object:nil];

и определите:

- (void)appWillResign {
    [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:sysBright];        
}
1 голос
/ 08 февраля 2012

Поскольку текущие методы не работают в методах делегатов приложения, вы можете использовать UIView, как описано Адамом.

Создайте UIView lvar в файле делегата h:

UIView *view_;

Тогда в реализации:

// 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;

Сделайте вид размером вашего экрана или вид контроллера по мере необходимости. и убедитесь, что он находится поверх всех других подпредставлений.

Имейте в виду, что это существенно повлияет на графическую производительность приложения, но если вы не делаете что-то сумасшедшее с пользовательским интерфейсом, все будет в порядке.

0 голосов
/ 24 января 2013

вы звонили синхронизировать?

[[NSUserDefaults standardUserDefaults] synchronize];
0 голосов
/ 29 ноября 2011

Со второй до последней строки вы не присвоили переменную sysBright.

sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:sysBright];        
0 голосов
/ 29 ноября 2011

Когда вы нажимаете кнопку «Домой», ваше приложение не перестает работать, а переходит в «Фоновый режим» и имеет собственный метод делегата, который необходимо определить:

- (void)applicationDidEnterBackground:(UIApplication *)application

Что-то вроде этого (в дополнение к applicationDidBecomeActive: методу делегата) должно получить намеченное поведение:

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