Непрозрачность тени слоя - PullRequest
2 голосов
/ 11 июля 2011

Я добавляю тень к UIView:

[blurView.layer setCornerRadius:kCornerRadius];    
blurView.layer.masksToBounds = NO;
blurView.layer.shadowColor = [[UIColor redColor] CGColor];
blurView.layer.backgroundColor = blurView.layer.shadowColor;
blurView.layer.shadowPath = [UIBezierPath
                             bezierPathWithRoundedRect:CGRectMake(-2.0*kCornerRadius, -2.0*kCornerRadius, blurView.bounds.size.width+4.0*kCornerRadius, blurView.bounds.size.height+4.0*kCornerRadius)
                             cornerRadius:kCornerRadius].CGPath;
blurView.layer.cornerRadius = kCornerRadius;
blurView.layer.shadowOffset = CGSizeMake(0.0, 0.0);
blurView.layer.shadowRadius = kCornerRadius;
blurView.layer.shadowOpacity = kOpacity;
blurView.layer.opacity = 1.0;

Эта часть кода дает мне это представление, как будто uiview размыто:

enter image description here

Когда я пытаюсь изменить непрозрачность blurView.layer (например, на 0,5), я получаю неожиданный вид:

enter image description here

Как вы можете видеть - я получаю острые края uiview.

Я думаю, непрозрачность теней является частью непрозрачности слоя - это причина этой «ошибки».Кто-нибудь может помочь мне исправить это?Может быть, я могу объединить слои перед изменением прозрачности blurView.layer или что-то вроде этого?

UPD

С этим исправлением: blurView.layer.shadowColor = [[UIColorcolorWithRed: 1 зеленый: 0 синий: 0 альфа: 0,5] CGColor];

Я получаю это:

enter image description here

UPD

Ответ использует метод setShouldRasterize:

enter image description here

Спасибо всем!

[blurView.layer setShouldRasterize:YES];

Ответы [ 3 ]

3 голосов
/ 12 июля 2011

Ответ использует эту строку кода:

blurView.layer.shouldRasterize = YES;
0 голосов
/ 11 июля 2011

Что произойдет, если вы положите это:

blurView.layer.shadowOpacity = 1.0;
blurView.layer.opacity = 0.5;

Я думаю, что вы можете установить непрозрачность тени на 0,5, а затем весь слой на 0,5, делая тень вдвое прозрачнее?

(или я совершенно не прав!)

0 голосов
/ 11 июля 2011

Может быть, вы могли бы попытаться вставить это?

blurView.layer.shadowColor = [[UIColor colorWithRed:1 green:0 blue:0 alpha:0.5] CGColor];
...