ios – 透明的径向梯度层面具

我使用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]; 

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

您可以使用名称为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]; 

欲了解更多信息,你可以参考本教程。