[英]CAGradientLayer as layerClass for UIView
我試圖通過覆蓋UIView的layerClass類方法,將CAGradientLayer用作UIView子類的根層。 我已經對UIButton子類執行了完全相同的操作,並且一切正常,但是對於UIView,我看不到漸變,只是看到了默認的白色視圖背景。
這是我的代碼:
#import <UIKit/UIKit.h>
#import "UIView+NBStyle.h"
@interface NBStylizedView : UIView
@property (nonatomic, strong) UIColor* highColor;
@property (nonatomic, strong) UIColor* lowColor;
@end
...
#import "NBStylizedView.h"
#import <QuartzCore/QuartzCore.h>
@implementation NBStylizedView
@synthesize highColor;
@synthesize lowColor;
+ (Class) layerClass {
return [CAGradientLayer class];
}
- (void)drawRect:(CGRect)rect {
if (self.highColor && self.lowColor) {
CAGradientLayer* gLayer = (CAGradientLayer*) self.layer;
[gLayer setColors:
[NSArray arrayWithObjects:
(id)[self.highColor CGColor],
(id)[self.lowColor CGColor], nil]];
}
[super drawRect:rect];
}
- (void)setHighColor:(UIColor*)color {
highColor = color;
[self.layer setNeedsDisplay];
}
- (void)setLowColor:(UIColor*)color {
lowColor = color;
[self.layer setNeedsDisplay];
}
@end
誰能闡明我的問題所在?
我嘗試了您的代碼,但一開始也沒有看到漸變。 如果我在視圖的awakeFromNib方法中將視圖的背景色設置為clearColor,它將起作用。
由於視圖的默認不透明值為YES,因此,視圖必須在繪制內容之前繪制背景。 如果您設置customView.opaque = NO; 視圖啟動后。 至於Button,默認的不透明性是No,您可以在IB中看到Clears Graphics Context是YES。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.