iOS-仿支付宝收付款界面亮度变化+条形码二维码放大效果

代码地址:iOS仿支付宝收付款界面亮度变化+条形码二维码放大效果

一. 条形码二维码放大效果

支付宝的效果是点击二维码,全屏显示,并且有缓慢放大的效果,点击条形码,横向展示,缓慢放大。

如果是二维码,只需要将二维码图片进行一个坐标转换,然后再使用UIView做动画,如果是条形码,还需要使用CGAffineTransformMakeRotation(M_PI * 0.5);旋转,代码比较简单,可以参考如上代码。

二. 收付款界面亮度变化效果

使用[UIScreen mainScreen].brightness = brightness;来调节亮度。

支付宝的效果是进入收付款界面高亮,进入收款界面也高亮,进入其他界面就恢复亮度。然后进入后台、打开通知栏、工具栏恢复亮度,进入前台之后再高亮,如果用户调节亮度,会记录用户调节的亮度,下次恢复的时候就恢复到用户调节的亮度。

由于收付款界面和收款界面都高亮并且是临近的,使用viewWillAppear这些方法就不行了,我们使用导航控制器的代理方法- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {}这个方法会在push或者pop之前调用,我们在这个方法里面判断是不是需要变亮的界面,然后再做相应的操作。

使用起来很简单,只需要一行代码:

//添加自动调解亮度的类
[[PCBrightnessManager sharedManager] addBrightnessControlWithArr:@[@"PCPaymentCodeViewController",@"PCPublicTransitViewController"]];

上面的方法做了:保存需要控制亮度的类数组、保存初始亮度、设置导航控制器的代理为单例。

然后在willShowViewController代理方法里面:控制亮度、添加通知、移除通知、销毁单例等等,详细可见文章开头代码。

问题:打开通知栏会调用:willResignActivedidBecomeActivewillResignActive,不知道为什么。打开工具栏就只会调用willResignActive

如果不添加亮度渐变效果,因为打开通知栏会调用三个方法,所以亮度调节会有问题。

我们给亮度调节添加渐变效果,并且使用NSOperationQueue,设置:

//最大操作数1
_brightnessQueue.maxConcurrentOperationCount = 1;

并且调节亮度之前先取消旧的操作:

//先取消旧的操作
[_brightnessQueue cancelAllOperations];

使用一个for循环,通过线程睡眠[NSThread sleepForTimeInterval:stepTime];达到亮度渐变的效果,详细可见文章开头代码。

你可能感兴趣的:(iOS-仿支付宝收付款界面亮度变化+条形码二维码放大效果)