热门搜索 :
考研考公
您的当前位置:首页正文

如何加载一个渐变色的Layer??

来源:东饰资讯网

用很简单的方法解决了一个很简单的问题...

事情发生在几个小时前。
我用5s打开了一个正在开发的小项目,
在一个页面中,有一个渐变的图层,他,错位了。

他具备如下特点:
1.仅仅是一个简单的颜色渐变
2.是用layer做的效果
3.xib适配,6s为基准大小。

查看了一下代码,之前屎一样的逻辑是这样的
viewDidLoad里面进行判断,如果这个layer还没被加载,就创建并加载之(判断方法是view.layers的subLayers的count...)。
让我想起来更之前的想法是懒加载这个layer,在ViewDidLayoutSubviews里面设置layer.frame = view.bouns的设置。

现在看来显然这几个方法都是行不通的,谁也不想看到一个错位的渐变,哪怕他渐变的再漂亮再有层次也不行。

得以解决问题的方法依然简单的像屎一样。
在ViewDidLayoutSubviews里面,每次layout最后都进行一次加载。
在加载之前当然要判断这个Layer是否已经存在,如果存在就remove掉。
所以需要设置两个属性,view和layer。
问题解决...


问题简单到完全不需要上图就能理解。
不过还是把代码贴出来...

// 分割线
@property (weak, nonatomic) IBOutlet UIView *lineView;
// 渐变分割线
@property (nonatomic, weak) CAGradientLayer * lineLayer;

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    
    // ...若干其他操作
  
    [self addLayer];
}

- (void)addLayer {
    // 判断存在,存在就删
    if (self.lineLayer) {
        [self.lineLayer removeFromSuperlayer];
    }
    
    CAGradientLayer *lineLayer = [[CAGradientLayer alloc] init];
    lineLayer.frame = self.lineView.bounds;
    
    // 渐变过程,kColor一堆数字,是一个颜色值...
    lineLayer.colors = [NSArray arrayWithObjects:(id)[kColor768082 colorWithAlphaComponent:0.0].CGColor,
                        (id)[kColorF2C5B8 colorWithAlphaComponent:0.7]. CGColor,
                        (id)[kColorF2C5B8 colorWithAlphaComponent:0.0]. CGColor,
                        (id)[kColorF2C5B8 colorWithAlphaComponent:0.0].CGColor,
                        (id)[kColorF2C5B8 colorWithAlphaComponent:0.7]. CGColor,
                        (id)[kColorF2C5B8 colorWithAlphaComponent:0.0]. CGColor,
                        nil];

    // 设置位置,这个数组的count与colors是一致的
    lineLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
                           [NSNumber numberWithFloat:0.4],
                           [NSNumber numberWithFloat:0.42],
                           [NSNumber numberWithFloat:0.58],
                           [NSNumber numberWithFloat:0.6],
                           [NSNumber numberWithFloat:1.0],
                           nil];
    
    lineLayer.startPoint = CGPointMake(0,0.5);
    lineLayer.endPoint = CGPointMake(1,0.5);
    [self.lineView.layer addSublayer:lineLayer];
    self.lineLayer = lineLayer;
}
Top