是不是应该搞点前序什么的呢???
最近公司项目涉及二维码页面,公司虽不要求做了像支付宝那样,跳转到二维码页面后该页面的亮度需要很亮,从而实现扫描更快更准确。建议开发的时候还是自己选择,毕竟屏幕突然变亮很是辣眼睛
首先分析一下主要业务需求及处理逻辑,最后我把demo上传需要的小伙伴可以参考参考
需求分析:
1、跳转到二维码页面需要高亮退出页面后恢复系统亮度:
这个需求我们可以在二维码控制器中完成
// 我的二维码控制器
#import "QRCodeController.h"
@interface QRCodeController ()
// 当前试图控制器的亮度
@property (nonatomic, readwrite, assign) CGFloat currentLight;
@end
@implementation QRCodeController
- (void)viewDidLoad {
[super viewDidLoad];
[self setTitle:@"我的二维码"];
self.view.backgroundColor = [UIColor whiteColor];
UIImageView *qRImg = [[UIImageView alloc]initWithFrame:CGRectMake(ScreenW*0.1, ScreenH/2 - (ScreenW * 0.4), ScreenW * 0.8, ScreenW * 0.8)];
qRImg.image = [UIImage imageNamed:@"CodeImg"];
[self.view addSubview:qRImg];
}
// 把将要进入二维码页面时的系统亮度保存
- (void)viewWillAppear:(BOOL)animated
{
self.currentLight = [[USER_DEFAULTS valueForKey:SCREEN_BRIGHT] floatValue];
[USER_DEFAULTS setBool:YES forKey:ISQRCONTROLLER];
}
// 进入控制器完成后,让控制器变量
- (void)viewDidAppear:(BOOL)animated
{
[[UIScreen mainScreen] setBrightness: 0.7];//0.1~1.0之间,值越大越亮
}
// 退出控制器时恢复之前的亮度
- (void)viewWillDisappear:(BOOL)animated
{
[[UIScreen mainScreen] setBrightness: self.currentLight];//0.5是自己设定认为比较合适的亮度值
[USER_DEFAULTS setBool:NO forKey:ISQRCONTROLLER];
}
2、在二维码页面按”Home“键后需要还原系统原来的亮度,程序从后台变前台后当前页面是二维码页面此刻需要高亮
这个需求主要是在appDelegate的几个方法中处理,只要你熟悉几个代理的作用,到这里心里应该知道怎么实现了吧
// 正在使用应用的时候按“home”键,恢复系统的亮度
- (void)applicationWillResignActive:(UIApplication *)application {
CGFloat brights = [[USER_DEFAULTS valueForKey:SCREEN_BRIGHT] floatValue];
[[UIScreen mainScreen] setBrightness:brights];
}
// 应用成前台运行的时候,(即上次再使用APP的时候,突然按“home”键后,过一定时间又想用APP,如果是从二维码页面退出到后台,需要使二维码页面变亮(这时二维码的控制器中的几个方法不起作用,就靠这里了))
- (void)applicationDidBecomeActive:(UIApplication *)application {
BOOL isQR = [[USER_DEFAULTS valueForKey:ISQRCONTROLLER] boolValue];
if (isQR) {
[[UIScreen mainScreen] setBrightness:0.7];
}else{
[USER_DEFAULTS setFloat:[[UIScreen mainScreen] brightness] forKey:SCREEN_BRIGHT];
}
}
// 终止APP的时候 恢复记录的亮度(双击“home”键之后,强制杀死程序)
- (void)applicationWillTerminate:(UIApplication *)application {
CGFloat brights = [[USER_DEFAULTS valueForKey:SCREEN_BRIGHT] floatValue];
[[UIScreen mainScreen] setBrightness:brights];
}
总结:
朋友。。。如果你想直接通过copy以上代码实现你的需求的话,还不行,必须马上报错,原因是几个宏缺少,当然你也可以自己定义几个宏!
最最重要的一点是需要在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 这个代理中吧当前的系统亮度保存:
// 记录不是从二维码页面按“home”键退出到后台的
[USER_DEFAULTS setBool:NO forKey:ISQRCONTROLLER];
下面是二维码控制器.h文件中的几个宏定义:
#import <UIKit/UIKit.h>
// 设备尺寸的宽、高
#define ScreenW CGRectGetWidth([UIScreen mainScreen].bounds)
#define ScreenH CGRectGetHeight([UIScreen mainScreen].bounds)
// NSUserDefaults 数据缓存
#define USER_DEFAULTS [NSUserDefaults standardUserDefaults]
// 用于设置屏幕的亮度
#define SCREEN_BRIGHT @"screenBrights" // 保存得系统亮度
#define ISQRCONTROLLER @"isQRController"// 记录是否是从二维码页面退到前台(即在二维码页面时,按"home"键)
@interface QRCodeController : UIViewController
@end
demo下载 需要真机测试,demo测试环境:Xcode9.0.1, iPhone6(10.3.3 || 11.0.3)