我猜我对Quartz或CAShapeLayer的操作还不了解,但是我想知道如何将填充颜色更改为我拥有的自定义UIView。
这是DotView
的实现:
#define kCustomBlue [UIColor colorWithRed:181.0/255 green:228.0/255 blue:226.0/255 alpha:1]
@implementation DotView
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame])) {
self.backgroundColor = [UIColor clearColor];
self.opaque = YES;
}
return self;
}
- (id)initWithCoder:(NSCoder *)coder
{
if ((self = [super initWithCoder:coder])) {
self.backgroundColor = [UIColor clearColor];
self.opaque = YES;
}
return self;
}
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CAShapeLayer *circleLayer = [CAShapeLayer layer];
[circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:rect] CGPath]];
circleLayer.fillColor = kCustomBlue.CGColor;
[self.layer addSublayer:circleLayer];
}
@end
在故事板中放置一个DotView
对象((nonatomic, weak)
界面中的ViewController
IBOutlet)之后,我运行了代码,一切正常。我的ViewController
界面中的对象称为dot1
我想要一个属性@property (nonatomic, strong) UIColor* fillingColor;
,该属性设置视图的填充颜色。如何正确实施?
想法是这样的:dot1
视图上有一个轻击手势识别器对象,每次我点击该点时,颜色从蓝色变为黑色(然后从黑色变为蓝色)。
我正在使用XCode 9.3,并且有运行iOS 11.2的iPhone 7
谢谢安东尼
答案 0 :(得分:0)
将属性添加到.h:
@interface DotView: UIView
// Add this to everything else you have
@property (nonatomic, strong) UIColor* fillingColor;
@end
然后在.m中,覆盖设置器:
- (void)setFillingColor:(UIColor *)color {
_fillingColor = color;
[self setNeedsDisplay];
}
然后在drawRect:
中,使用fillingColor
属性作为填充颜色:
circleLayer.fillColor = self.fillingColor.CGColor;
请注意,您不想每次调用drawRect:
时都在不断添加图层。您甚至不需要为此使用图层。只需填写UIBezierPath
。