如何从视图控制器设置自定义UIView(圆形)的填充颜色属性

时间:2018-07-05 16:27:50

标签: objective-c uiview uicolor cashapelayer

我猜我对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

谢谢安东尼

1 个答案:

答案 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