我的代码我的坑(四) —— iOS12系统自定义渐变色UISwitch手机横屏的异常问题(一)

版本记录

版本号 时间
V1.0 2018.11.24 星期六

前言

做了好几个APP,碰到了大大小小的很多坑,以前碰到坑,解决了就结束了,这里想把自己碰到的坑记录下来,一来给自己备查二来希望可以帮助到大家。感兴趣的可以关注下,也欢迎大家补充留言,感兴趣的看上面几篇文章。
1. 我的代码我的坑(一) —— 自签名证书导致请求取消的问题(一)
2. 我的代码我的坑(二) —— UIImageView动画点击后动画和图片消失的问题(一)
3. 我的代码我的坑(三) —— iOS9系统WKWebView加载页面白板的问题(一)

问题描述

最近又发了一版,其中遇到了各种各样的问题,有的还很奇葩。这里我们就说一下我碰到的问题,由于项目中要使用渐变色的UISwitch,于是我就自定义一个UISwitch,并在上面添加一个CAGradientLayer,但是提测QA就发现了一个问题,那就是对于iOS 12系统,当手机横屏的时候,这个自定义的UISwitch控件关闭的状态就异常了,竖屏或者其他系统手机横竖屏均无问题。

我的代码我的坑(四) —— iOS12系统自定义渐变色UISwitch手机横屏的异常问题(一)_第1张图片
iOS 12横屏非正常状态
其他系统横竖屏正常打开状态
其他系统横竖屏正常关闭状态

问题解决

这个奇葩问题,我想了很久也想不明白。最后在尝试中修好了,但是还是不知道为什么是这样的。

首先我们看一下关键代码

- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.gradientLayer = [CAGradientLayer layer];
        self.gradientLayer.startPoint = CGPointMake(0, 0);
        self.gradientLayer.endPoint = CGPointMake(1.0, 0);
        [self.layer insertSublayer:self.gradientLayer atIndex:0];
        
        [self setDefaultUI];
    }
    return self;
}

- (void)setDefaultUI {
    self.layer.borderWidth = 0;
    self.layer.cornerRadius = self.height / 2.0;
    self.layer.masksToBounds = YES;
    self.backgroundColor = [UIColor clearColor];
}

- (void)updateGradientBGColor:(NSArray *)colors
{
    NSMutableArray *array = [NSMutableArray array];
    for (UIColor *color in colors) {
        [array addObject:(__bridge id)color.CGColor];
    }
    self.gradientLayer.colors = array;
    [self setNeedsDisplay];
}

上面这个就是设置自定义UISwitch'的关键代码,下面这句就是使用的时候更新渐变色。

//更改自定义UISwitch的渐变layer的颜色
- (void)changeSwitchLayerColorWithSwitch:(JJGradientSwitch *)swicth
{
    if (swicth.on == NO) {
        [self.LinkmicSwitch updateGradientBGColor:@[[UIColor whiteColor]]];
    }
    else{
        [self.LinkmicSwitch updateGradientBGColor:@[[UIColor colorForHex:@"FF5CBF"], [UIColor colorForHex:@"FFCD7F"]]];
    }
}

这里就是关闭的时候是白色的layer,打开的时候就是一个自定义的渐变色。

最后是进行了尝试性的修复,还真起了作用,但是原因我是还没想明白。

[self.LinkmicSwitch updateGradientBGColor:@[[UIColor whiteColor]]];

修改成

[self.LinkmicSwitch updateGradientBGColor:@[[UIColor whiteColor], [UIColor whiteColor]]];

也就是尽管你要纯色,但是不能数组中只有一个元素,复制一下要两个元素就都好了。唯一想不明白的就是为什么,但是起作用了。不明白为什么iOS 12系统竖屏以及其他系统的横竖屏均没有问题,就这个iOS 12系统的横屏有问题。

仅以此文记录一下,有知道的或者遇到相同问题的可以解惑。

后记

本篇主要讲述了iOS12系统自定义渐变色UISwitch手机横屏的异常问题,感兴趣的给个赞或者关注~~~

我的代码我的坑(四) —— iOS12系统自定义渐变色UISwitch手机横屏的异常问题(一)_第2张图片

你可能感兴趣的:(我的代码我的坑(四) —— iOS12系统自定义渐变色UISwitch手机横屏的异常问题(一))