Заполните отдельные цвета для разных путей Безье

Я пытаюсь добавить отдельные цвета к разным bezierPaths, как это

UIGraphicsBeginImageContext(_v_sticker.frame.size);

UIColor *fillColor = [UIColor redColor];
[fillColor setFill];
UIColor *strokeColor = [UIColor blueColor];
[strokeColor setStroke];

p = [UIBezierPath bezierPath];
[p moveToPoint:CGPointMake(60, 10)];
[p addLineToPoint:CGPointMake(110, 60)];
[p addLineToPoint:CGPointMake(60, 110)];
[p addLineToPoint:CGPointMake(10, 60)];
[p closePath];
[p fill];
[p stroke];

fillColor = [UIColor redColor];
[fillColor setFill];
strokeColor = [UIColor blueColor];
[strokeColor setStroke];

p2 = [UIBezierPath bezierPath];
[p2 moveToPoint:CGPointMake(100, 10)];
[p2 addLineToPoint:CGPointMake(150, 60)];
[p2 addLineToPoint:CGPointMake(100, 110)];
[p2 addLineToPoint:CGPointMake(50, 60)];
[p2 closePath];
[p2 fill];
[p2 stroke];

CGMutablePathRef combinedPath = CGPathCreateMutableCopy(p.CGPath);
CGPathAddPath(combinedPath, NULL, p2.CGPath);
combined = [UIBezierPath bezierPathWithCGPath:combinedPath];
CFRelease(combinedPath);

mask = [CAShapeLayer new];
mask.path = combined.CGPath;

[_v_sticker.layer addSublayer:mask];
UIGraphicsEndImageContext();

Но я не получаю ничего, кроме черного цвета. Я могу задать цвет слою, но я хочу напрямую назначить разные цвета и использовать их в однослойном пути Безье.

Может ли кто-нибудь сказать мне, где я делаю ошибку?


person Gurjot Kalsi    schedule 21.10.2016    source источник


Ответы (1)


В вашем коде есть несколько ошибок:

  1. Вы создаете контекст изображения, но не получаете доступ к изображению (UIGraphicsGetImageFromCurrentImageContext()).
  2. Вы не установили цвета (например, backgroundColor, strokeColor) в слое маски.
person clemens    schedule 21.10.2016
comment
я использую свойство слоя, чтобы показать содержимое Безье вместо рендеринга изображения, потому что визуализированное изображение становится пиксельным, а слой, созданный поверх него, - нет. Мне нужно указать цвет фона представления, но я хочу напрямую указать цвет пути и сохранить его как слой - person Gurjot Kalsi; 24.10.2016
comment
Я имел в виду слой маски. Вы также должны установить его цвета. - person clemens; 24.10.2016
comment
хорошо, но если установить цвет слоя маски, он будет охватывать каждый путь, добавленный к слою, но я хочу придать разные цвета разным путям, а затем создать для него слой, чтобы он имел цвет и качество - person Gurjot Kalsi; 24.10.2016
comment
CAShapeLayer может рисовать контур только цветом фона, заливки и обводки соответственно. Для рисования путей разными цветами вам понадобится несколько слоев. - person clemens; 24.10.2016