Как получить контекст CALayer плюс несколько пикселей вокруг него? - PullRequest
1 голос
/ 10 января 2012

Я создаю слой с эффектом тени.Вместо того, чтобы добавлять его в качестве подслоя к слою моего вида, я хотел бы нарисовать его.Но у меня проблемы с возможностью нарисовать его с эффектом тени.Проблема в том, что размер контекста зависит от размера слоя.Но как мне установить прямоугольник для контекста?!

CALayer *layer = [CALayer layer];
layer.frame = ...;
layer.backgroundColor = [UIColor redColor].CGColor;
layer.cornerRadius = 2.0;
layer.masksToBounds = NO;
layer.shadowColor = [[UIColor whiteColor] CGColor];
layer.shadowOffset = CGSizeMake(0, 1);
layer.shadowRadius = 0.5;
layer.shadowOpacity = 0.2;
[self.layer addSublayer:layer];
UIGraphicsBeginImageContext(layer.bounds.size);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[viewImage drawAtPoint:CGPointMake(0, 0)];
[layer removeFromSuperlayer];

С приведенным выше кодом я получаю поле, но без нескольких дополнительных пикселей отступов с тенью (со всех четырех сторон).Если я увеличу размер ImageContext, все, что я получу, это больше высоты и ширины, но все равно начиная с x = 0 и y = 0, где я бы хотел, чтобы он начинался с x = -5, y = -5 или что-то вродечто.

enter image description here

Спасибо большое!

Ответы [ 2 ]

5 голосов
/ 10 января 2012

Увеличьте ваш контекст на 10 пикселей по x и y.

Затем, прежде чем рисовать свой слой, выполните CGContextTranslateCTM (context, 5,5);

Надеюсь, это поможет!

0 голосов
/ 10 января 2012

Я не уверен, является ли ваша проблема следующей, но она попалась мне на глаза.

[self.layer addSublayer:layer];
UIGraphicsBeginImageContext(layer.bounds.size);
[layer renderInContext:UIGraphicsGetCurrentContext()];

Похоже, у вас есть свойство в этом файле, называемое слоем, в которое вы добавляете созданный вами слой тени. Затем вы получаете контекст, основанный на текущем CALayer, в отличие от self.layer.

Я обычно использую CALayer для изменения UIImageView, и мне не нужно добавлять подслои, так что, возможно, этот код в порядке. Просто хочу указать на это, пожалуйста, дайте мне знать, если какой путь точен, как я всегда хотел бы узнать.

~ Удачи

...