Ios 反转核心图形中的径向渐变遮罩
我能够使用核心图形在iOS中屏蔽具有黑白径向渐变的图片。但我得到的结果正是我想要的。我希望图片从应用渐变的区域透明,并显示图片的剩余部分。这意味着图片中有一个“![hole][1]”。但在这里,这个洞将由渐变遮罩创建Ios 反转核心图形中的径向渐变遮罩,ios,core-graphics,gradient,masking,Ios,Core Graphics,Gradient,Masking,我能够使用核心图形在iOS中屏蔽具有黑白径向渐变的图片。但我得到的结果正是我想要的。我希望图片从应用渐变的区域透明,并显示图片的剩余部分。这意味着图片中有一个“![hole][1]”。但在这里,这个洞将由渐变遮罩创建 有谁能给我一些方法或提示来反转径向渐变遮罩,就像我们在photoshop中所做的那样。我认为最好的方法是插入图层,而不是使用遮罩。这就是我在IOS应用程序中所做的 - (void) addSublayer { CGPoint center = CGPointMake(sel
有谁能给我一些方法或提示来反转径向渐变遮罩,就像我们在photoshop中所做的那样。我认为最好的方法是插入图层,而不是使用遮罩。这就是我在IOS应用程序中所做的
- (void) addSublayer {
CGPoint center = CGPointMake(self.addButton.frame.origin.x, self.addButton.frame.origin.y);
UIBezierPath* clip = [UIBezierPath bezierPathWithArcCenter:center
radius:CGRectGetMaxX(self.addUnavailabilitySubView.frame) - self.addButton.center.x
startAngle:-1.57
endAngle:1.57
clockwise:YES];
[clip addLineToPoint:center];
[clip closePath];
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
[shapeLayer setMasksToBounds:YES];
shapeLayer.frame = self.view.layer.bounds;
shapeLayer.path = clip.CGPath;
//This gradient layer can be a customised one
CALayer *gradientLayer = [CALayer layer];
gradientLayer.frame = CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width);
[self.view.layer insertSublayer:gradientLayer atIndex:0];
}
我也可以在这里分享我的径向渐变层:)
在渐变代码中应该有一个颜色组件数组。这听起来可能很傻,但是改变颜色会有帮助吗?或者你想在任何情况下反转颜色吗?@architectpianist不,我尝试过切换颜色,但效果不好。我知道现在评论已经晚了,但你提供的解决方案要好得多。非常感谢。
-(void)drawInContext:(CGContextRef)ctx {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 }; // End color
CGFloat components[8] = {0.f, 0.f, 0.f, 0.3f, 0.f, 0.f, 0.f, 0.8f};
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, num_locations);
CGFloat myStartRadius, myEndRadius;
CGPoint radialCenter = CGPointMake(100, 100)
myStartRadius = 20;
myEndRadius = 300;
CGContextDrawRadialGradient (ctx, gradient, radialCenter,
myStartRadius, radialCenter, myEndRadius,
kCGGradientDrawsAfterEndLocation);
}