我正在使用稍微修改过的代码版本,我在这里从顶部答案中抓取:Modern technique of adding gradient to UIView
我修改过的代码:
- (void)drawRect:(CGRect)rect
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();
// The if statements are surely a crappy way of setting the locations, but whatever
CGGradientRef gradient;
if ([self.colors count] == 3) {
CGFloat gradientLocations[] = {0, 0.5, 1};
gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)self.colors, gradientLocations);
} else {
CGFloat gradientLocations[] = {0, 1};
gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)self.colors, gradientLocations);
}
CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
}
我把它放到了一个名为Gradient_View
的类中,我试图将它子类化。在我的子类的init
方法中,我有这个:
self.colors = [NSArray arrayWithObjects:
(id)[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f].CGColor,
[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.0f].CGColor,
nil];
请注意,最终数组中的第二种颜色的alpha值为0,因此渐变应该变为透明。但是,我在模拟器中得到的结果是完全不透明的:
如何让透明度发挥作用?
答案 0 :(得分:4)
检查你的UIView是否不透明。确保opaque设置为NO。