iOS6将阴影添加到具有角半径的容器UIView

时间:2013-05-28 20:15:53

标签: ios objective-c cocoa-touch ios6 core-graphics

一个包含的UIView如何同时具有阴影和圆角半径?

我已尝试多次在SO上建议的其他解决方案,但遗憾的是它们似乎不适用于iOS6(或者至少不适用于我)

所以我想我可以发布这个,以便找到iOS6解决方案。

我有一个容器UIView,其中包含两个子视图

- a custom UIImageView
- a custom UIView

我希望整个UIView的圆角半径为2.5,但我也希望UIView有一个阴影。 但是,到目前为止,我只获得了这2个愿望中的1个,而不是同时发生这两个愿望。

这是我的代码,我对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;

^这里自我是包含自定义UIView,上面有两个子视图

有没有人知道这个问题的iOS6解决方案?


更新

所以,我不需要边框颜色,所以当我看到解决方案时我没有添加它,但这次我添加了,使用下面评论中的解决方案,似乎UIView正在变得圆滑,但我真的希望UIImageView和UIView结合起来。

基本上,UIImageView位于顶部,UIView位于底部。

那么我如何才能将UIImageView的顶部四舍五入,并且只对UIView的底部进行舍入。

感谢。

注意:阴影作为一个整体对象,但角半径不能作为整个对象使用?

2 个答案:

答案 0 :(得分: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. 我要感谢大家的帮助。 :)

答案 1 :(得分: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;