Я пытаюсь использовать CAGradientLayer в качестве корневого уровня подкласса UIView, переопределяя метод класса classClass UIView. Я сделал ТОЧНО то же самое для подкласса UIButton, и все это отлично работает, однако для UIView я не вижу градиента, я просто вижу фоновый белый фон по умолчанию.CAGradientLayer как layerClass для 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
Может кто-нибудь пролить некоторый свет на том, где моя проблема лежит?
Вы должны устанавливать цвета слоя градиента в методах сеттера для высоких и низких цветов, а не для drawRect. Также обратите внимание, что свойство 'colors' неявно анимируется, поэтому вы должны установить его внутри CATransaction с disableActions, установленным в YES – jrturton