2014-11-08 2 views
1

Я пытаюсь добавить непрозрачность к моему представлению. Когда я добавляю CAGradientlayer, я грубо понимаю, что я планировал, но имею несколько проблем.CAGradientLayer Mask добавить непрозрачность в Swift

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

enter image description here

Мой код выглядит следующим образом:

let maskLayer = CAGradientLayer() 

maskLayer.anchorPoint = CGPoint(x: 0.0, y: 0.0) 

maskLayer.startPoint = CGPoint(x: 0.0, y: 0.5) 
maskLayer.endPoint = CGPoint(x: 1.0, y: 0.5) 

maskLayer.colors = [UIColor(white: 0.0, alpha: 0.0).CGColor, UIColor(white: 1.0, alpha: 1.0).CGColor, UIColor(white: 0.0, alpha: 0.0).CGColor] 
maskLayer.locations = [0.0, 0.5, 1.0] 
maskLayer.bounds = CGRectMake(0, 0, self.frame.width, self.frame.height) 

self.layer.mask = maskLayer 

Что я делаю неправильно?

Благодаря

ответ

0

О белом, это потому, что маска слоя не способствует цвету, только прозрачность. По существу, только альфа-компонент имеет эффект, а компоненты R, G, B маски слоя игнорируются.

О смещении, может быть, потому, что ваш вид меняется, и ваш слой не обновляется? Если это так, вы можете увидеть ответ на этот вопрос: CALayers didn't get resized on its UIView's bounds change. Why?

+0

Спасибо за очистку. Когда я применяю layoutSubviews, как предлагается в вашей ссылке, он очищает смещение влево и добавляет его вместо этого. – Jan

+0

Не могли бы вы показать реализацию layoutSubviews? – Clafou

+0

переопределения функ layoutSubviews() { lineLayer.frame = self.bounds super.layoutSubviews()}, где lineLayer является CALayer, который добавляется в качестве подвида – Jan

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