ios - 透明径向渐变层掩模

时间:2014-05-06 11:55:40

标签: ios cagradientlayer

我使用CAGradientLayer作为图片的图层。我使用这段代码:

UIImage *image = [UIImage imageNamed:@"perfect.jpg"];

[testImage setImage:image];

CAGradientLayer *myLayer = [CAGradientLayer layer];

myLayer.anchorPoint = CGPointZero;

//starts in bottom left
myLayer.startPoint = CGPointMake(0.0f,0.5f);

//ends in top right
myLayer.endPoint = CGPointMake(0.5f, 0.0f);

UIColor *outerColor = [UIColor colorWithWhite:1.0 alpha:0.0];
UIColor *innerColor = [UIColor colorWithWhite:1.0 alpha:1.0];

//an array of colors that dictatates the gradient(s)
myLayer.colors = @[(id)outerColor.CGColor, (id)outerColor.CGColor, (id)innerColor.CGColor, (id)innerColor.CGColor];

//these are percentage points along the line defined by our startPoint and endPoint and correspond to our colors array. The gradient will shift between the colors between these percentage points.
myLayer.locations = @[@0.0, @0.15, @0.5, @1.0f];

myLayer.bounds = CGRectMake(0, 0, CGRectGetWidth(testImage.bounds), CGRectGetHeight(testImage.bounds));

testImage.layer.mask = myLayer;

[self.view addSubview:testImage];

但渐变仅适用于我图像的两侧。我想要的是将渐变应用为圆形或径向渐变。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以使用名称为CIVignette的CIFilter获取径向渐变。请尝试使用以下代码。

UIImage *image = [UIImage imageNamed:@"perfect.jpg"];
CIFilter *vignette = [CIFilter filterWithName:@"CIVignette"];
[vignette setValue:image forKey:kCIInputImageKey];
[vignette setValue:@(1) forKey:@"inputIntensity"];
[vignette setValue:@(30) forKey:@"inputRadius"];

CIImage *outputImage = [vignette outputImage];
CGImageRef cgimg = [ [CIContext contextWithOptions:nil] createCGImage:outputImage
                                 fromRect:[outputImage extent]];
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
testImage.image = newImage;
[self.view addSubview:testImage];

有关详细信息,请参阅this tutorial.