Как мне вырезать вырез из CALayer? - PullRequest
5 голосов
/ 20 октября 2011

У меня есть набор представлений в карусели, каждый из которых использует CAGradientLayer в качестве фона. Карусель сидит на текстурированном фоне. Меня попросили задеть фон в треугольнике, чтобы показать выбранный вид. Я не могу просто использовать треугольное изображение с текстурой фона, так как оно не обязательно совпадает с основным фоном. Я хотел бы вырезать вырез из фона текущего вида, чтобы текстурированный фон был виден через вырез.

Как мне это сделать? Можно ли сделать полигональный слой?

Ответы [ 3 ]

10 голосов
/ 20 октября 2011

Я обнаружил, что смог сделать это с помощью CAShapeLayer:

CAShapeLayer *mask = [[[CAShapeLayer alloc] init] autorelease];
mask.frame = backgroundLayer.bounds;
mask.fillColor = [[UIColor blackColor] CGColor];

CGFloat width = backgroundLayer.frame.size.width;
CGFloat height = backgroundLayer.frame.size.height;

CGMutablePathRef path = CGPathCreateMutable();

CGPathMoveToPoint(path, nil, 0, 0); 
CGPathAddLineToPoint(path, nil, width, 0);
CGPathAddLineToPoint(path, nil, width, height);
CGPathAddLineToPoint(path, nil, (width/2) + 5, height);
CGPathAddLineToPoint(path, nil, width/2, height - 5);
CGPathAddLineToPoint(path, nil, (width/2) - 5, height);
CGPathAddLineToPoint(path, nil, 0, height);
CGPathAddLineToPoint(path, nil, 0, 0);
CGPathCloseSubpath(path);

mask.path = path;
CGPathRelease(path);

backgroundLayer.mask = mask;
0 голосов
/ 20 октября 2011

Я не думаю, что мы можем рисовать многоугольные слои. Тем не менее, я считаю, что ожидаемый результат может быть достигнут двумя различными способами: -

  1. Если ваши изображения имеют одинаковый размер, вы можете использовать PNG-изображение с прозрачной выемкой между ними (или снаружи по вашему желанию).

  2. Нарисуйте заполненный прямоугольник и прозрачный треугольный многоугольник. Затем вам нужно пересечь как многоугольник (прямоугольник и треугольник). Полученная форма должна быть помещена поверх изображения карусели. Преимущество этого метода заключается в том, что вы можете динамически изменять размер и форму многоугольников, если это необходимо.

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

0 голосов
/ 20 октября 2011

Можно ли сделать многоугольный слой?

Нет.

Как мне это сделать?

Используйте маску - изображение в формате png, которое имеет тот же размер, что и ваш слой, но немного вырезано - это заставит CALayer выглядеть отрезанным от него.(Тем не менее, это не так, если у вас большой вырез, вы можете заставить пользователей пытаться прикоснуться к тому, что стоит за ним, что не сработает!).

См. Документацию (и поиск stackoverflow ) для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...