[英]How do I create a UIView subclass with a transparent gradient background?
我想創建一個具有透明漸變背景的自定義UIView
,以使文本在此自定義視圖后面的視圖上更可見。
這是一個示例圖像:
圖片橙色框是我的透明漸變視圖下的UIView
。 然后,我將文本放在透明漸變視圖的頂部,並且由於其較暗,因此文本將更加可見,但是您仍然可以從其后面看到一些橙色框。
我在弄清楚如何使用UIView
完成此操作時遇到了麻煩。
在我的自定義UIView
的drawRect
我有:
- (void)drawRect:(CGRect)rect
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();
NSArray *gradientColors = @[(id)[UIColor colorWithWhite:0.0 alpha:0.0].CGColor,
(id)[UIColor colorWithWhite:0.0 alpha:0.55].CGColor,
(id)[UIColor colorWithWhite:0.0 alpha:0.7]];
CGFloat gradientLocations[] = {0, 0.77, 1};
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) gradientColors, gradientLocations);
CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGGradientRelease(gradient);
}
但是它似乎不支持透明性,因為當我將UIView
添加到self.view
它是完全不透明的黑色。
這就是我在CSS中的做法:
background-image: linear-gradient(-180deg, rgba(0,0,0,0.00) 0%, rgba(0,0,0,0.55) 23%, rgba(0,0,0,0.70) 100%);
但是同樣,我不知道如何針對自定義UIView
子類執行此操作。
我不會打擾CoreGraphics,所以我會使用CAGradientLayer
。
在子類中覆蓋+layerClass
。
+ (Class)layerClass { return [CAGradientLayer class]; }
在接口中重新定義layer
屬性以使用此類。
@property(nonatomic, readonly, retain) CAGradientLayer *layer;
設置顏色和其他屬性。
self.layer.colors = gradientColors; self.layer.locations = gradientLocations; // But this time as `NSArray` self.layer.startPoint = startPoint; // From 0 to 1 self.layer.endPoint = endPoint; // From 0 to 1
您可以像這樣在photoshop中創建半透明圖像 並將其放在您的OrangeView上。 由於此圖像太暗,您可以通過更改其Alpha值來控制其透明度。 這種安排將使您的textView和transImage都成為orangeView的子視圖。 文本視圖將放置在transImage的頂部。
無需編寫任何代碼。
讓我知道是否需要更多信息.. :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.