2013-05-28 80 views
1

如何包含UIView同時具有陰影和角半徑?iOS6將陰影添加到容器具有角半徑的UIView

我已經嘗試過其他解決方案,因此多次建議,但不幸的是他們似乎並不爲iOS6的工作(或至少不適合我)

所以我想我可能會發布此,使得iOS6的解決方案可以找到。

我有一個容器UIView其中包含兩個子視圖

- a custom UIImageView 
- a custom UIView 

我想整個的UIView有2.5的圓角半徑,但我也想了UIView有一個陰影。 但是,到目前爲止,我只有這兩種慾望中的一種,從來都不是同一時間。

這是我的代碼,我有不同的版本與我的不同嘗試SO解決方案,但這只是我的一個版本。

self.layer.shouldRasterize = YES; 
    self.layer.rasterizationScale = [UIScreen mainScreen].scale; 
    self.layer.cornerRadius = 2.5; 
    self.layer.masksToBounds = YES; 
    self.layer.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.1].CGColor; //0.1 
    self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath; 
    self.layer.shadowOpacity = 1.0; 
    self.layer.shadowRadius = 3.0; 

^這裏上面

有誰知道一個iOS6的解決這個問題的描述有兩個子視圖的含自定義的UIView?


UPDATE

所以,我並不需要一個邊框顏色,所以我沒有加入,當我看到了解決方案,但我加了這個時候,使用在下面的評論的解決方案,並看起來UIView變得圓潤了,但我真的希望組合的UIImageView和UIView四捨五入。

所以基本上,UIImageView是最上面的,UIView是底部。

那麼我如何才能得到UIImageView的頂部舍入,只有UIView的底部被舍入。

謝謝。

注:陰影作爲一個整體對象工作,但拐角半徑不能作爲一個整體對象工作?

+0

你看過這個答案? http://stackoverflow.com/questions/4754392/uiview-with-rounded-corners-and-drop-shadow – jfuellert

+0

是的,沒有從該網頁的解決方案爲我工作,不幸@jfuellert – GangstaGraham

+0

@jfuellert查看更新,任何對此有何想法? – GangstaGraham

回答

5

我想通了。

self.layer.shouldRasterize = YES; 
self.layer.rasterizationScale = [UIScreen mainScreen].scale; 
self.layer.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.8].CGColor; 
self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.layer.bounds cornerRadius:self.layer.cornerRadius].CGPath; 
self.layer.shadowOpacity = 1.0; 
self.layer.shadowRadius = 3.0; 

UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; 
[self addSubview:container]; 

[container addSubview:self.someCustomUIView]; 
[container addSubview:self.someCustomImageView]; 

container.layer.cornerRadius = 2.5; 
container.layer.masksToBounds = YES; 

所以基本上:

  1. 我設置的主要的UIView的陰影。
  2. 我創建了一個容器子視圖包含其它兩個子視圖
  3. 我設置的容器子視圖
  4. 瞧的圓角半徑!有用!
  5. 我希望這適用於在一個UIView中有多個子視圖的其他人
  6. 我想感謝大家的幫助。 :)
2

我想你應該改變這行代碼:

self.layer.masksToBounds = YES; 

這一個

self.layer.masksToBounds = NO; 

如果設置masksToBounds爲YES,那麼你不會看到任何超出視圖的邊界,這是一個陰影的情況。

這段代碼來自我目前的項目(iOS 6),它工作正常。我可以看到圓角和陰影。

self.layer.masksToBounds = NO; 
self.layer.cornerRadius = 5.0; 
self.layer.shadowColor = [UIColor blackColor].CGColor; 
self.layer.shadowOffset = CGSizeMake(0, -1); 
self.layer.shadowOpacity = 0.6; 

UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect: self.layer.bounds]; 
self.layer.shadowPath = shadowPath.CGPath; 
+0

角落沒有用這種方法(或至少沒有與我的UIView由於某種原因)四捨五入@MarcinKuptel – GangstaGraham

+0

10即使你設置shadowRadius? –

+0

是的,我欣賞幫助,雖然,我會繼續嘗試,我不知道我的UIView有什麼問題,但它似乎並沒有工作。我覺得問題是包含兩個子視圖比主UIView – GangstaGraham