1

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

我曾多次尝试过 SO 上建议的其他解决方案,但不幸的是它们似乎不适用于 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;

^这里self是包含上述两个子视图的自定义 UIView

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


更新

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

所以基本上,UIImageView 在顶部,UIView 在底部。

那么如何只让 UIImageView 的顶部被舍入,而只有 UIView 的底部被舍入。

谢谢。

注意:阴影作为一个整体工作,但圆角半径不是作为一个整体工作?

4

2 回答 2

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. 我要感谢大家的帮助。:)
于 2013-05-28T21:13:08.587 回答
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;
于 2013-05-28T20:31:34.297 回答