我的应用程序运行时需要调暗iphone屏幕

时间:2009-12-16 18:31:43

标签: iphone ios cocoa-touch uikit

我不希望手机进入睡眠状态,所以我正在使用:

    [ [ UIApplication sharedApplication ] setIdleTimerDisabled:YES ] ;

但是我确实需要手机将屏幕灰化以免浪费电池。我已经看到了这个问题How can I dim the view in an iPhone application?,但需要更多细节。

我正在尝试这样的事情:

将opaqueWindow设置为最前面(加载了320 x 480黑色图像)

[opaqueWindow makeKeyAndVisible];
[ opaqueWindow setAlpha:1.00 ] ;        
[ mainWindow setAlpha:0.10 ] ;

并尝试返回mainWindow并将其设置在最前面(选择器控件和一些标签):

    [ opaqueWindow setAlpha:0 ] ;       
    [mainWindow makeKeyAndVisible];
    [ mainWindow setAlpha:1.00 ] ;

我的应用中只能有一个关键窗口,对吗?所以当mainWindow成为键时,则opaqueWindow不会,反之亦然。我按如下方式创建opaqueWindow并访问mainWindow:

    opaqueWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen ] bounds]];
    opaqueView = [[UIView alloc] init];
    [opaqueWindow addSubview:opaqueView];

mainWindow = [ myApplication keyWindow ] ;

即使我尝试让我的mainWindow再次处于活动状态,我的控件仍然显示为灰色,而opaqueWindow似乎仍然可以控制。

我是iphone开发的新手,我一直在寻找Cocoa Touch for iphone 3开发者参考和其他一些书籍。

我将不胜感激任何帮助或建议。

谢谢你!

Piesia

编辑:我假设opaqueWindow需要将按钮单击传递给mainWindow,而opaqueWindow是关键。我是从opaqueWindow的按钮处理程序中调用mainWindow的按钮处理程序还是有更好的方法来执行它。谢谢! P上。

2 个答案:

答案 0 :(得分:8)

从iOS 5开始,您可以使用公共API:

[[UIScreen mainScreen] setBrightness:1.0];//replace 1.0 with any value...

使用不透明度框架节拍...

答案 1 :(得分:4)

虽然从可用性的角度来看它可能有意义,但我怀疑用灰色视图覆盖窗口实际上可以改善电池运行时间。您将不得不调暗背光,这是主要的能量消耗。这只能通过越狱手机或私人API(这将阻止您的应用程序被Apple批准)。

在视图控制器中使用此方法,通过添加50%alpha的黑色视图来调暗。确保设置userInteractionEnabled = NO以将事件传递给基础视图。

- (IBAction)dim:(id)sender {
    UIView *dimView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    dimView.backgroundColor = [UIColor blackColor];
    dimView.alpha = 0.5f;
    dimView.userInteractionEnabled = NO;
    [self.view addSubview:dimView];
}

如果您想提高运气并冒被拒绝的风险,请尝试使用此私有API调用:

[(id)[UIApplication sharedApplication] setBacklightLevel:1.0f];