У меня есть следующий код: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
. Я предполагаю, что CAShapeLayer
frame
не имеет смысла, поскольку path
может выйти за пределы frame
. Добавление следующей строки сделали это показать:
self.faucet.frame = CGRectMake(0, 0, 64, 64);
Так что теперь мой вопрос, есть ли способ, чтобы избежать необходимости делать это? Я бы хотел, чтобы рамка слоя неявно была похожа на содержащий вид View/Layer.
Они не являются слабыми свойствами, не так ли? – Gavin
Chuckle, no :) Они '(сильные, неатомические)' –
Вы проверили, что ваш метод 'faucetPath' возвращает то, что вы хотите? – Gavin