2014-12-28 3 views
0

Я получаю удовольствие от продуктов Core Animation. Мне нужно было применить образ изображения к CALAyer. Та часть работы совершенно с чем-то вроде этого:CALAYER применить цвет фона плюс рисунок image

color = UIColor(patternImage: UIImage(named: "myPatternImage")! 
shapeLayer.fillColor = color.CGColor; 

Но теперь мне нужно использовать цвет фона позади картины. мое изображение Patter - это png (с альфа-компонентом). Поэтому я хочу применить простой цвет к форме и после применения шаблона Image. Есть ли способ сделать это на лету?

+0

Используйте два слоя. – Andy

+0

Я оживляю эти слои. Если я понимаю ваш комментарий, вы имеете в виду, что я могу использовать слой «clone» поверх моего реального слоя. Но так как я оживляю свои слои, мне также придется оживлять слой клона; И это может стать очень сложным. Поэтому я предпочитаю использовать решение на основе подслоев. Но я не дошел, чтобы заставить его работать. – LastMove

+0

Я ничего не говорил о клонирующих слоях. Я сказал использовать два отдельных слоя. Ниже приведен правильный ответ. – Andy

ответ

3

Просто добавьте еще один подуровень с цветом фона и добавить его до вашего рисунка фоновый слой:

UIColor *backgroundColor = [UIColor redColor]; 
CALayer *solidBackgroundColorLayer = [[CALayer alloc] init]; 
solidBackgroundColorLayer.backgroundColor = backgroundColor.CGColor; 
[[self layer] addSublayer:solidBackgroundColorLayer]; 
UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"MyPattern.png"]]; 
backgroundLayer = [[CALayer alloc] init]; 
[backgroundLayer setBackgroundColor:[color CGColor]]; 
[[self layer] addSublayer:backgroundLayer]; 
+0

Извините, я сделал ошибку в моем вопросе. Я поставил плохой код. Я не использую свойство цвета фона, но свойство fillColor. Поскольку мои CALayers имеют uibezierPath внутри. (Я использую SVGKit). Итак, я попробовал что-то на основе вашего ответа: var solidBackgroundLayer = CAShapeLayer (layer: shapeLayer); solidBackgroundLayer.fillColor = цвет.CGColor; shapeLayer.addSublayer (solidBackgroundLayer); но он не работает – LastMove

+0

'fillColor' set заполняет цвет пути в слое формы, но вы не устанавливаете' solidBackgroundLayer.path' любым путем ... –

+0

А, спасибо, я, хотя этот CAShapeLayer (layer: shapeLayer); скопирует все свойства из shapeLayer в новый, но не скопирует путь. Спасибо, что теперь он отлично работает. Но я немного беспокоюсь о производительности :) – LastMove

Смежные вопросы