2013-04-04 3 views
4

Я пытаюсь затемнить окружающий район моего UIImageView и оставляю только часть (которую я определяю с помощью своей маски).Добавить полупрозрачную маску в CALayer?

Прямо сейчас я определяю свою маску и устанавливаю свой imageView.layer.mask, однако вместо того, чтобы затемнить остальную часть изображения, он полностью удаляет ее.

Пример типа эффекта я хочу: http://i.imgur.com/vVUiuyk.png

пример того, что я получаю: http://i.imgur.com/5DTXo0S.png

Ссылочные документы упоминают, что маска использует это альфа-слоя, так что я пытался манипулирование непрозрачность маски. Однако это только влияет на непрозрачность части, которую я хочу оставить в покое, в то время как остальная часть изображения все еще полностью вырезана.

Может ли кто-нибудь указать, что я делаю неправильно? Благодарю.

Вот мой код:

CAShapeLayer *mask = [CAShapeLayer layer]; 
GMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, nil, 1052, 448); 
CGPathAddLineToPoint(path, nil, 2, 484); 
CGPathAddLineToPoint(path, nil, 54, 1263); 
CGPathAddLineToPoint(path, nil, 56, 1305); 
CGPathAddLineToPoint(path, nil, 380, 1304); 
CGPathAddLineToPoint(path, nil, 1050, 1311); 
CGPathCloseSubpath(path); 
mask.path = path; 
CGPathRelease(path); 

//mask.opacity = 0.5; //doesn't affect the surrounding portion, only the cut out area. 
self.imageView.layer.mask = mask; 
+1

Другой вариант: иметь темную (но не полную непрозрачность) наложение с маской, чтобы скрыть часть вокруг вашей стрелки. – jtbandes

ответ

3

Что вы делаете неправильно использует маску слоя в первую очередь. Вы пытаетесь затенять или затемнить область вашего изображения. Это не то, что делает маску слоя вообще! В основном слойная маска пробивается в существующем слое, вызывая то, что есть позади, чтобы показать его. Это именно то, что вы обнаружили:

это полностью удалить его вместо

Да, потому что это то, что слой делают маски! Если вы этого не хотите, почему вы используете маску слоя?

Что вы хотите, так это просто разместить второй вид изображения (или просто подуровень) над первый. Он содержит изображение, которое вы рисуете. Он прозрачный, за исключением случаев, когда он имеет полупрозрачную темную заливку цвета. Это будет темнее, чем позади. Вы используете обводной путь , чтобы определить область, которая не получает заливку темного цвета.

В качестве альтернативы, измените изображение в изображении, нарисуя его сверху , составив или, возможно, используя CIFilter.

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