如何将CAGradient应用于部分图片?

时间:2015-08-06 12:55:51

标签: ios cagradientlayer

gradientMask.startPoint = CGPointMake(1.0, 0.0);

gradientMask.endPoint = CGPointMake(1.0, 0.5);

它是为了上半部分,但不是为了下来部分的图片,请帮帮我?

1 个答案:

答案 0 :(得分:0)

尝试使用以下代码创建一个填充整个高度的渐变。一旦它工作,尝试更改开始和结束值。您的问题可能与您创建它的方式,设置框架的方式有关,也可能与使用clearColor有关。可能值得使用像红色的其他东西。

为您的单元格类添加渐变图层的属性,以便您可以访问它:

@property CAGradientLayer *gradient;

添加此功能,以便轻松创建渐变图层。

CAGradientLayer *createBackgroundGradientLayer(CGRect forFrame,UIColor *fromColour,UIColor *toColour){
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.startPoint = CGPointMake(0.0, 0.0);
    gradient.endPoint = CGPointMake(1.0, 1.0);
    gradient.colors = [NSArray arrayWithObjects:(id)[fromColour CGColor],(id)[toColour CGColor], nil];
    gradient.frame = forFrame;

    return gradient;
}

在您的单元格中创建渐变的位置执行以下操作:您真的要在viewWillAppear而非viewDidLoad中执行此操作,以便框架大小正确。

// Create new gradient layer
self.gradient = createBackgroundGradientLayer(cell.hotelBg.layer.bounds,[UIColor blackColor],[UIColor clearColor]);

// Add the gradient layer to the back.
[cell.hotelBg.layer insertSublayer:gradient atIndex:0];

布局更改时,您需要重置背景渐变图层框。覆盖自定义单元格中的layoutSubviews方法。

- (void)layoutSubviews{
    [super layoutSubviews];

    // Re-align the background gradient layer to the correct bounds.
    self.gradient.frame=self.hotelBg.layer.bounds;
}

假设self.hotelBg是某种视图,它具有适当大小的约束等。