什么时候将CALayers / CAGradientLayers添加到iOS 8.3的UITableViewCells或UICollectionViewCells?

时间:2015-04-15 17:43:12

标签: ios objective-c calayer cagradientlayer

我创建了一个类方法来创建一个可以添加到我想要的任何视图的渐变图层。

+ (CAGradientLayer *)createPartialGradientWithFrame:(CGRect)frame
{
    UIColor *color1 = [[UIColor blackColor] colorWithAlphaComponent:0.00f];
    UIColor *color2 = [[UIColor blackColor] colorWithAlphaComponent:0.10f];
    UIColor *color3 = [[UIColor blackColor] colorWithAlphaComponent:0.25f];
    UIColor *color4 = [[UIColor blackColor] colorWithAlphaComponent:0.50f];
    UIColor *color5 = [[UIColor blackColor] colorWithAlphaComponent:0.75f];

    NSArray *colors = @[(id)color1.CGColor,
                        (id)color2.CGColor,
                        (id)color3.CGColor,
                        (id)color4.CGColor,
                        (id)color5.CGColor];

    NSNumber *stop1 = [NSNumber numberWithFloat:0.00f];
    NSNumber *stop2 = [NSNumber numberWithFloat:0.25f];
    NSNumber *stop3 = [NSNumber numberWithFloat:0.50f];
    NSNumber *stop4 = [NSNumber numberWithFloat:0.75f];
    NSNumber *stop5 = [NSNumber numberWithFloat:1.00f];

    NSArray *locations = @[stop1, stop2, stop3, stop4, stop5];

    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.colors = colors;
    gradientLayer.locations = locations;
    gradientLayer.frame = frame;

    return gradientLayer;
}

我想在tableview或集合视图中将它用作我的单元格的背景图层。

如果我只是在初始化期间添加它,如果视图控制器使用自动布局,则帧将是错误的。

我还尝试在单元子类中使用此代码:

- (void)layoutSubviews {
    [super layoutSubviews];
    aGradientLayer.frame = self.contentView.bounds;
}

它有时会起作用,但是对于iOS 8.3,当视图出现时,框架仍然不适合。

修改:更新了代码段。

1 个答案:

答案 0 :(得分:1)

一些选择:

  1. 初始化" init"方法(或init的任何其他扩展)和" layoutSubviews"方法,调整大小,但请务必调用[super layoutSubviews]!

  2. 使用[UIScreen mainScreen] .bounds和一些数学来计算单元格的宽度/高度。

  3. 我要使用数字1.如果您没有调用[super layoutSubviews],则可能无法正确调整contentView的大小。

相关问题