2014-01-14 3 views
2

У меня есть следующий код:CAGradientLayer с CAShapeLayer маска не показывая

- (void)setupLayer { 
    self.faucetShape = [CAShapeLayer layer]; 
    self.faucetShape.strokeColor = [[UIColor blackColor] CGColor]; 
    self.faucetShape.lineWidth = 2; 
    self.faucetShape.fillColor = nil; 
    self.faucetShape.path = [self faucetPath].CGPath; // faucetPath returns a 4 point diamond shaped UIBezierPath* 
    self.faucet = [CAGradientLayer layer]; 
    self.faucet.mask = self.faucetShape; 
    self.faucet.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor redColor].CGColor]; 
    [self.layer addSublayer: self.faucet]; 
} 

Но это ничего не показывает. Не уверен, что мне не хватает (кроме моей графики).

(faucet и faucetPath оба свойства)

UPDATE

Хорошо, я предполагаю, что CAGradientLayer должен иметь содержательный frame. Я предполагаю, что CAShapeLayerframe не имеет смысла, поскольку path может выйти за пределы frame. Добавление следующей строки сделали это показать:

self.faucet.frame = CGRectMake(0, 0, 64, 64); 

Так что теперь мой вопрос, есть ли способ, чтобы избежать необходимости делать это? Я бы хотел, чтобы рамка слоя неявно была похожа на содержащий вид View/Layer.

+0

Они не являются слабыми свойствами, не так ли? – Gavin

+0

Chuckle, no :) Они '(сильные, неатомические)' –

+0

Вы проверили, что ваш метод 'faucetPath' возвращает то, что вы хотите? – Gavin

ответ

3

Вам необходимо установить рамку слоев. Следующий код рисует красный круг:

- (void)setupLayer 
{ 
    CAShapeLayer *faucetShape = [CAShapeLayer layer]; 
    faucetShape.frame = CGRectMake(0, 0, 100, 100); 
    faucetShape.strokeColor = [[UIColor blackColor] CGColor]; 
    faucetShape.lineWidth = 2; 
    faucetShape.fillColor = nil; 
    CGMutablePathRef path = CGPathCreateMutable(); 
    CGPathAddEllipseInRect(path, nil, CGRectMake(0, 0, 100, 100)); 
    faucetShape.path = path; 
    CGPathRelease(path); 
    CAGradientLayer *faucet = [CAGradientLayer layer]; 
    faucet.frame = CGRectMake(10, 10, 100, 100); 
    faucet.mask = faucetShape; 
    faucet.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor redColor].CGColor]; 
    [self.view.layer addSublayer: faucet]; 
} 
Смежные вопросы