簡體   English   中英

CAGradientLayer作為UIView的layerClass

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM