2013-05-28 54 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