我看到,我可以通过注册为UIScreenBrightnessDidChangeNotification
的观察者来检测屏幕亮度的变化
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(brightnessDidChange:) name:UIScreenBrightnessDidChangeNotification object:nil];
}
-(void) brightnessDidChange:(NSNotification*)notification
{
NSLog(@"Brightness did change");
}
通知的object属性是一个UIScreen
对象。
我试图找到一个属性,让我知道该操作是由用户生成的,还是由iOS自动生成的。这对于我的应用程序来说很重要,因为这两种情况都应该被不同的对待。我在文档中没有找到关于这个的任何东西。任何帮助都将不胜感激。
发布于 2014-01-15 11:46:08
我认为这是不可能的,我们只能得到notification
时,亮度变化的系统或手动。我们不能把两者区分开来。
发布于 2016-06-22 11:41:21
如果用户改变亮度,他们将从控制中心或设置应用程序。您可以根据UIApplicationDelegate
通知检测甚至区分这两种情况(因为您的应用程序将在打开Control时进入非活动,在用户打开设置时进入后台)。
如果您收到UIScreenBrightnessDidChangeNotification
,而您的应用程序是Active,您可以确定这是由系统触发的自动更改。
当然,当您的应用程序处于、非活动或背景状态时,也可能会发生自动更改,但基于此的启发式解决方案可能总比什么都没有好。
发布于 2019-08-20 19:45:03
Swift 5.2
通知现在被称为UIScreen.brightnessDidChangeNotification
。
let noteCenter = NotificationCenter.default
noteCenter.addObserver(self,
selector: #selector(brightnessDidChange),
name: UIScreen.brightnessDidChangeNotification,
object: nil)
@objc func brightnessDidChange() {
print(UIScreen.main.brightness)
}
https://stackoverflow.com/questions/21135992
复制相似问题