如何更新 UIView 的图层属性并为其子视图保留图层?

Posted

技术标签:

【中文标题】如何更新 UIView 的图层属性并为其子视图保留图层?【英文标题】:How to update a layer property for UIView and keep the layer for it subview? 【发布时间】:2013-07-02 19:26:00 【问题描述】:

这可能是一个关于 ios 层的初学者问题,但我想不出一个正确的方法来处理它......

我以编程方式创建一个 UIView 并向其添加一个按钮。

UIView *subview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; 
UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[mybutton setTitle:@"Test1" forState:UIControlStateNormal];
mybutton.frame = CGRectMake(0,0,50,50);
[subview mybutton];

比我对子视图演示文稿进行一些操作来更改它的图层属性。例如,我更改视图边框半径并添加阴影:

[subview.layer setCornerRadius:10.0f];
[subview.layer setShadowColor:[UIColor blackColor].CGColor];
[subview.layer setShadowOpacity:0.8];
[subview.layer setShadowRadius:3.0];

我看到 mybutton 的这些层也发生了变化,而不仅仅是子视图的问题。 例如按钮标题也有阴影。 我制作了一个示例屏幕截图以更好地解释我的问题: http://img46.imageshack.us/img46/8923/havq.png

如何在 iOS 中处理它?是我将按钮添加到的另一层吗? 感谢您的建议和帮助!

【问题讨论】:

【参考方案1】:

问题不在于您对图层的所有更改,而只是阴影。那是因为阴影被应用到合成 Alpha 通道的图层上,并且包括它的子图层。

你可以:

    使用阴影路径而不是标准偏移量 添加一个不同的子层来指定阴影(它是按钮的兄弟)

【讨论】:

以上是关于如何更新 UIView 的图层属性并为其子视图保留图层?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问使用 Paintcode 生成的 UIView 自定义类中的图层?

无法访问 UITableViewCell 中 UIView 的图层属性 [重复]

UIView 动画块中的图层动画

移动子视图时,如何将其子视图保留在其父视图中的同一位置?

CALayer 详解

UIView 在其图层动画后显示不正确