如何将角半径和阴影添加到iOS

时间:2017-12-13 05:20:44

标签: ios swift autolayout

enter image description here 自动布局(约束)后如何制作视角的角半径和阴影(即使视图也有一些子视图)以及哪个方法为写代码。如果我在 viewdidload,viewDidAppear 中编写代码,我无法获得精确的角半径和阴影?

这是我在viewWillLayoutSubview中执行的代码,我可以获得角半径,但我无法获得阴影效果。如果我删除view.layer.masksToBounds = true我可以获得阴影,但它不仅仅是基本视图的角落而不是它的子视图..

view.layer.cornerRadius = 10
view.layer.masksToBounds = true

view.layer.borderWidth = 1.0
view.layer.borderColor = UIColor.black.cgColor

view.layer.shadowColor = UIColor.black.cgColor
view.layer.shadowOffset = CGSize(width: 3, height: 3)
view.layer.shadowOpacity = 0.7
view.layer.shadowRadius = 4.0

8 个答案:

答案 0 :(得分:3)

    viewShadow.layer.cornerRadius = 12
    viewShadow.layer.masksToBounds = true;

    viewShadow.backgroundColor = UIColor.white
    viewShadow.layer.shadowColor = UIColor.lightGray.cgColor
    viewShadow.layer.shadowOpacity = 0.8
    viewShadow.layer.shadowOffset = CGSize(width: 0.0, height: 0.0)
    viewShadow.layer.shadowRadius = 6.0
    viewShadow.layer.masksToBounds = false

enter image description here

答案 1 :(得分:1)

取决于某些条件

1.如果您从故事板设置了autolayout约束并且视图的大小(高度,宽度)是固定的,那么您可以在viewDidLoad中设置角半径。

2.如果从故事板设置自动布局约束并且视图的大小(高度,宽度)是比例,那么设置角半径的安全位置是viewWillLayoutSubview。

3.如果您以编程方式设置约束,那么也可能存在某些条件.viewWillAppear,viewDidAppear,viewWillLayoutSubview,viewDidLayoutSubview都可以根据您的具体情况进行操作。

答案 2 :(得分:1)

无法设置

layer.masksToBounds = true 

并获取阴影,因为maskToBounds将剪切落入视图边界的所有内容。并且因为阴影被放置在边界上所以它也会剪辑。唯一的办法就是让所有子视图远离边界。

另一种方式是。

将您的视图添加为另一个视图的子视图,我们将其称为父视图。  使用

将阴影添加到父视图
 layer.cornerRadius = 10
 layer.masksToBounds = false

在您的视图中添加

 layer.cornerRadius = 10
 layermasksToBounds = true 

这样可行。

答案 3 :(得分:1)

添加此代码,然后在故事板中检入属性检查器后,它会显示您设置边框颜色,阴影,半径。

|static

图片如下图所示:enter image description here

答案 4 :(得分:1)

添加父对象,parentView->查看

为parentView设置shadow和cornerRadius,maskToBounds = false

为view设置cornerRadius,maskToBounds = true

答案 5 :(得分:0)

试试这个答案:

UIView * paintView=[[UIView alloc]initWithFrame:CGRectMake(50, 150, 320, 430)];
[paintView setBackgroundColor:[UIColor yellowColor]];

paintView.layer.masksToBounds = NO;
paintView.layer.cornerRadius = 5;
paintView.layer.shadowOffset = CGSizeMake(-.2f, .2f);
paintView.layer.shadowRadius = 3;
paintView.layer.shadowOpacity = 0.8;
paintView.layer.shadowColor = [[UIColor redColor] CGColor];

UIBezierPath *path = [UIBezierPath bezierPathWithRect:paintView.bounds];
paintView.layer.shadowPath = path.CGPath;
[self.view addSubview:paintView];

答案 6 :(得分:0)

您可以尝试以下方法:

func addShadow(container : UIView){

    container.layer.shadowColor = UIColor.black.cgColor
    container.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
    container.layer.shadowOpacity = 0.2
    container.layer.shadowRadius = 5.0

}

答案 7 :(得分:0)

要同时添加拐角半径和阴影,您需要通过添加相同大小的另一个视图或在其上添加子视图来伪造该视图。

因此,首先,添加您的视图,假设containerView就像您的父视图/超级视图一样,我们将通过以下方式正常为其添加阴影:

containerView.backgroundColor = .clear
containerView.layer.shadowColor = UIColor.lightGray.cgColor
// or if you'd like to add shadow color in black, it's what you prefer
//containerView.layer.shadowColor = UIColor.black.cgColor
containerView.layer.shadowOffset = .zero
containerView.layer.shadowOpacity = 0.3
// shadow radius is optional, you can add or comment it
containerView.layer.shadowRadius = 8
containerView.layer.masksToBounds = false

然后您可以通过以下方式在containerView上创建子视图:

containerView.addSubview(subContainerView)
subContainerView.backgroundColor = .white
subContainerView.layer.cornerRadius = 8
subContainerView.layer.masksToBounds = true

containerView会将阴影反射到subContainerView上,该阴影实际上是拐角半径。

注意:如果您想更改视图的背景色,请更改subContainerView背景。

Check this simple project