iOS(OC)—仿支付宝我的二维码页面系统亮度调整

是不是应该搞点前序什么的呢???

最近公司项目涉及二维码页面,公司虽不要求做了像支付宝那样,跳转到二维码页面后该页面的亮度需要很亮,从而实现扫描更快更准确。建议开发的时候还是自己选择,毕竟屏幕突然变亮很是辣眼睛

首先分析一下主要业务需求及处理逻辑,最后我把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)

Swift方案实现


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

启程Boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值