【问题标题】:UIView shadow AND rounded cornersUIView 阴影和圆角
【发布时间】:2014-09-15 15:34:35
【问题描述】:

我有一个 UIView,我想要一个阴影和圆角。 问题是 - 阴影需要masksToBounds = NO,而圆角需要masksToBounds = YES

我找到的解决方案是创建一个有阴影的容器,并将我的 UIView 添加为容器的子视图 - 并给它圆角。

这行得通。我有阴影和圆角——但这不好。 阴影是矩形视图,我的图像有圆角。

如何实现圆角的阴影?

【问题讨论】:

  • 我在应用圆角时没有问题。问题是圆角和阴影看起来不太好......
  • 使用掩蔽角落的图像。它比任何编程解决方案都更简单、编码更快并且通常更好看。
  • 我的问题是单元格可以使用动画不时改变它的大小。使用图片会让我的生活更加艰难。

标签: ios objective-c uiview calayer shadow


【解决方案1】:
// border radius
[yourView.layer setCornerRadius:30.0f];

// border
[yourView.layer setBorderColor:[UIColor blackColor].CGColor];
[yourView.layer setBorderWidth:1.5f];
 yourView.layer.masksToBounds=YES;

// drop shadow
[yourView.layer setShadowColor:[UIColor lightGrayColor].CGColor];
[yourView.layer setShadowOpacity:0.8];
[yourView.layer setShadowRadius:3.0];
[yourView.layer setShadowOffset:CGSizeMake(2.0, 2.0)];

这可能会对你有所帮助。

【讨论】:

  • “masksToBounds”的值应该是多少?是或否?
  • 是否需要边框?
  • 我使用了代码。圆角可见,但阴影不可见 (masksToBounds=YES)。
  • 更改阴影颜色和边框颜色。
  • .maskToBounds 限制了阴影的绘制。这个答案不正确。
【解决方案2】:

移除容器,它会剪裁您的视图阴影。导入QuartzCore/QuartzCore.h。并在您的视图中尝试此代码

#import < QuartzCore/QuartzCore.h>

...

view.layer.cornerRadius = 5.0f;
[view.layer setShadowColor:[UIColor redColor].CGColor];
[view.layer setShadowOpacity:0.7];
[view.layer setShadowRadius:5.0];
[view.layer setShadowOffset:CGSizeMake(2.0, 2.0)];

要了解有关 maskToBound 的更多信息,请参阅此链接

What UIView layer.masksToBounds is doing if set to YES?

【讨论】:

  • 容器是有阴影的——它不能剪掉阴影
  • @godmoney 那么为什么你使用容器,如果你可以将两者(阴影,角落)设置到你的主视图层?
  • 否 - 因为阴影需要 maskToBounds = NO 而圆角需要 maskToBounds = YES。
【解决方案3】:
import UIKit

@IBDesignable
class customButton: UIView {

    @IBInspectable var cornerRadius:CGFloat = 0{
        didSet{
            self.layer.cornerRadius = cornerRadius
        }
    }

    @IBInspectable var borderWidth:CGFloat = 0{
        didSet{
            self.layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var borderColor:UIColor = UIColor.white{
        didSet{
            self.layer.borderColor = borderColor.cgColor
        }
    }


}

将此设置为 UIView 的类并输入maskToBound = true。然后在检查器中相应地设置值以获得 rounded 阴影。

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 2012-07-11
    • 2016-10-05
    • 2016-02-20
    • 2011-09-10
    相关资源
    最近更新 更多