2011-11-29 57 views
27

我使用[[UIScreen mainScreen] setBrightness:](在SDK 5.0中)更改我的應用程序中的系統背景燈。applicationWillResignActive和setBrightness不起作用?

下面的步驟,我的應用程序工作:

  1. 活躍的應用程序,讓系統亮度爲默認值,然後保存爲sysBright。

  2. 用我的應用改變亮度,改變亮度,然後保存爲appBright。

  3. 帶主頁按鈕或鎖定按鈕的ResignActive應用程序,將亮度設置爲sysBright(步驟1值,系統默認亮度)。

  4. 再次激活應用程序。然後,它會重複上述步驟形式1〜3

出毛病了步驟3中,當我失活與所述鎖定按鈕的應用程序,功能applicationWillResignActive效果很好,它可以恢復的亮度值(sysBright )。

但是,當我按Home按鈕,它不再工作。亮度仍然是我在應用程序中更改的值。 (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];   
} 

我這麼想嗎?

+0

您是否找到了解決辦法?我遇到了同樣的問題。設置中的亮度值完全不受影響。 –

+0

需要同樣的東西,如果您有任何問題,請分享您的解決方案。謝謝 – Mangesh

+1

結束了與黑色半透明UIView和利用接近API –

回答

0

當您點擊主頁按鈕應用程序不主動辭職,而是進入「後臺模式」,有你需要定義自己的委託方法:

- (void)applicationDidEnterBackground:(UIApplication *)application 

像這樣的東西(除到applicationDidBecomeActive:委託方法)應該得到預期的行爲:

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

謝謝,但它仍然是不工作... 我想: - (空)applicationDidEnterBackground:(UIApplication的*)應用 { 的NSLog(@「的應用程序是在後臺運行「); //將亮度恢復正常 [[UIScreen mainScreen] setBrightness:sysBright]; } ' 它NSLogs在我按下home鍵,但不改變亮度的評論? –

+0

不知道程序的其餘部分,但是你可能需要從用戶默認值中取回sysBright變量。在我的原始答案中查看我的更新代碼 –

+2

嘗試了您的新建議,但仍然沒有運氣。 我可以在applicationDidEnterBackground方法中NSLog正確的sysBright值,但它實際上不會改變亮度。 當我使用相同的代碼打開應用程序時,亮度在applicationWillEnterForeground中發生變化!很困惑! –

0

倒數第二行,你沒有指定sysBright變量。

sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"]; 
[[UIScreen mainScreen] setBrightness:sysBright];   
+0

感謝您的建議,但它仍然不起作用 –

+0

我認爲現在還不可能做到,但是我做了一個荒謬的解決方法,將ImageView設置爲0.9不透明的黑色矩形。如果我是誠實的,那就是一種魅力,只是因爲我沒有找到涉及[UIScreen setBrightness]的解決方案而浪費了太多時間而感到沮喪; –

+0

我剛剛在我自己的應用程序中嘗試過,它工作得很好。確保亮度值在0和1之間,並且是一個浮點數。 – Tim

1

由於當前方法在應用程序委託方法中不起作用,因此可以使用Adam描述的UIView。

請在委託.h文件一個UIView LVAR:

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; 

使視圖屏幕或視圖控制器的大小根據需要。並確保它在所有其他子視圖之上。

請記住,這將對應用程序的圖形性能產生重大影響,但除非您對UI做了一些瘋狂的事情,否則應該沒問題。

+0

是的,我已經從他的評論中挑選出來了,但我不想這樣做。你最好在狀態欄級別上做一個新的窗口,而不是子視圖,否則你可能不得不一直把它移到前臺! – jrturton

+0

這是一個黑客,我知道,但它適用於我的應用程序。希望將來有一個解決方案。 – TigerCoding

+0

這並沒有幫助我的情況,我正在減少背光以減少電池使用量。 – progrmr

1

您是否嘗試過在執行applicationWillResignActive後發送的UIApplicationWillResignActiveNotification的註冊主視圖控制器(或任何其他對象)?

這將使您有機會修改applicationWillResignActive以外的亮度。不知道這種方法是否有所作爲,但嘗試它應該很容易。

只需撥打:

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

然後定義:

- (void)appWillResign { 
    [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"]; 
    [[UIScreen mainScreen] setBrightness:sysBright];   
} 
+0

好主意,但不是,結果相同。我開始認爲答案只是提交一個錯誤。我的意思是,應用程序內的亮度變化甚至不應該影響整個設備 - 或者可能不會。 iBooks有同樣的問題。改變那裏的亮度是一個全局設置。 – jrturton

10

我在這裏回答了類似的問題:IOS5 setBrightness didn't work with applicationWillResignActive

的iOS並不意味着保留在應用程序內的亮度值。它應該在應用程序退出活動,退出,崩潰等後恢復系統值。所以官方沒有必要在applicationWillResignActive中這樣做。

但它沒有工作。 這是一個錯誤。事實上,如果你嘗試切換到另一個應用程序,它會起作用。嘗試按住「主頁」按鈕兩次,亮度消失。

不要浪費你的時間只是向蘋果公司報告錯誤報告(我做得很好)。

解鎖屏幕恢復默認系統亮度。只需按兩次電源按鈕並解鎖即可恢復原始亮度。

更新: 我的錯誤報告被關閉,因爲根據蘋果它不是一個錯誤。真奇怪。

+1

https://devforums.apple.com/thread/139813?start=0&tstart=0 –

+0

請提交錯誤報告。蘋果公司的優先次序根據重複次數來修復它們。如果您解釋修復程序如何改善用戶體驗,它也會有所幫助。即使您的已關閉,我仍要重新提交。 – progrmr

+1

已在iOS 8中修復! – jjxtra

-1

你叫同步嗎?

[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

是的,那不是 –

相關問題