我已经看到我可以通过注册为观察者来检测屏幕亮度的变化UIScreenBrightnessDidChangeNotification
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(brightnessDidChange:) name:UIScreenBrightnessDidChangeNotification object:nil];
}
-(void) brightnessDidChange:(NSNotification*)notification
{
NSLog(@"Brightness did change");
}
通知的对象属性是一个UIScreen
对象。
我试图找到一个属性,让我知道操作是用户生成的,还是 iOS 生成的自动更改。这对我的应用程序很重要,因为这两种情况应该区别对待。我在文档中没有找到任何有关此的内容。任何帮助将不胜感激。
如果用户更改亮度,他们会从"控制中心"或"设置"应用进行更改。您可以根据UIApplicationDelegate
通知检测甚至区分这两者(因为您的应用将在打开"控制中心"时变为非活动状态,并在用户打开"设置"时进入"后台")。
如果您在应用处于活动状态时收到UIScreenBrightnessDidChangeNotification
,则可以确定这是系统触发的自动更改。
当然,当您的应用处于非活动或后台状态时,也可能发生自动更改,但也许基于此的启发式解决方案总比没有好。
是不可能的,只有当系统或手动更改亮度时,我们才能获得notification
。 我们无法区分两者。
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)
}