Как установить свойство заливки цвета пользовательского UIView (круг) из View Controller - PullRequest
0 голосов
/ 05 июля 2018

Полагаю, я недостаточно знаю о манипуляциях с 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) IBOutlet в моем интерфейсе ViewController) в моей раскадровке я запускаю код, и все в порядке и отлично. Этот объект в моем ViewController интерфейсе называется dot1

Я хочу иметь свойство @property (nonatomic, strong) UIColor* fillingColor;, которое устанавливает цвет заливки для вида. Как мне правильно это реализовать?

Идея такова: к представлению dot1 прикреплен объект распознавателя жестов касания, и каждый раз, когда я нажимаю на точку, цвет меняется с синего на черный (затем с черного на синий).

Я использую XCode 9.3 и у меня iPhone 7 под управлением iOS 11.2

Спасибо, Энтони

1 Ответ

0 голосов
/ 05 июля 2018

Добавьте свойство к .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.

...