2012-07-30 93 views
5

我有同樣的問題,因爲這裏的鏈接: Can't add a corner radius and a shadow添加圓角到的UIImageView和顯示陰影效果

如果我把maskToBounds = YES,我得到的圓角,但沒有影子 如果我把maskToBounds = NO ,我得到了影子,但沒有圓角。

然後我按照上面那個鏈接中的說明,設置maskToBounds = NO,「而是設置圓角半徑,並用圓角矩形設置陰影的貝塞爾路徑,保持二者的半徑相同。但是,我沒有找到圓角,也沒有得到任何影子! (即沒有陰影的方形圖像)你能幫我解決這個問題嗎?我不知道我做錯了什麼。提前致謝。

self.userImageView.backgroundColor = [UIColor redColor]; 
self.userImageView.clipsToBounds = NO; 
self.userImageView.contentMode = UIViewContentModeCenter; 
self.userImageView.layer.masksToBounds = NO; 

self.userImageView.layer.borderWidth = 1; 
self.userImageView.layer.borderColor = [[UIColor grayColor] CGColor]; 

self.userImageView.layer.shadowOpacity = 1; 
self.userImageView.layer.shadowColor = [[UIColor blackColor] CGColor]; 
self.userImageView.layer.shadowRadius = 8.0f; 
self.userImageView.layer.shadowOffset = CGSizeMake(-3, 0); 
self.userImageView.layer.shouldRasterize = YES; 

self.userImageView.layer.shadowPath = [[UIBezierPath bezierPathWithRoundedRect:[self.userImageView bounds] cornerRadius:10.0f] CGPath]; 

[self addSubview:self.userImageView]; 

回答

18

不幸的是,我不認爲UIImageView同時支持圓角和陰影。

但是,您可以在UIImageView的超級視圖中製作陰影。

CGFloat cornerRadius = 3.0 

UIView *container = [[UIView alloc] initWithFrame:aRect]; 
container.layer.shadowOffset = CGSizeMake(0, 0); 
container.layer.shadowOpacity = 0.8; 
container.layer.shadowRadius = 5.0; 
container.layer.shadowColor = [UIColor redColor].CGColor; 
container.layer.shadowPath = [[UIBezierPath bezierPathWithRoundedRect:container.bounds cornerRadius:cornerRadius] CGPath]; 

self.userImageView.layer.cornerRadius = cornerRadius; 
self.userImageView.layer.masksToBounds = YES; 
self.userImageView.frame = container.bounds; 
[container addSubview:self.userImageView]; 
[self addSubview:container]; 
+0

我認爲你的方法會奏效,我會盡快嘗試。感謝你的回答。我發佈這個問題已經很長時間了,我很高興看到一個答案。 – John 2012-10-19 19:06:04

+0

什麼是'aRect'? – 2013-12-14 00:13:05

+0

aRect是您希望您的imageView所在的位置(即沒有容器時的imageView框架)。 – 2014-01-04 02:22:59