gpt4 book ai didi

ios - 向我的 UIView 添加阴影的最佳方法是什么

转载 作者:IT王子 更新时间:2023-10-29 07:28:58 25 4
gpt4 key购买 nike

我正在尝试为彼此重叠的 View 添加阴影, View 折叠允许看到其他 View 中的内容,在这种情况下我想保留 view.clipsToBounds ON 以便在 View 折叠时剪裁其内容。

这似乎让我很难向图层添加阴影,因为当我打开 clipsToBounds 时,阴影也会被剪裁。

我一直在尝试操纵 view.frameview.bounds 以便为框架添加阴影,但允许边界足够大以包含它,但是我没有运气。

这是我用来添加阴影的代码(这仅适用于 clipsToBounds OFF,如图所示)

view.clipsToBounds = NO;
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowOffset = CGSizeMake(0,5);
view.layer.shadowOpacity = 0.5;

这是应用于顶部最亮灰色层的阴影的屏幕截图。希望这能让我了解如果 clipsToBounds 关闭,我的内容将如何重叠。

Shadow Application.

如何向我的 UIView 添加阴影并保持我的内容被剪裁?

编辑:只是想补充一点,我也尝试过使用带阴影的背景图像,效果很好,但我仍然想知道最好的编码解决方案。

最佳答案

试试这个:

UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:view.bounds];
view.layer.masksToBounds = NO;
view.layer.shadowColor = [UIColor blackColor].CGColor;
view.layer.shadowOffset = CGSizeMake(0.0f, 5.0f);
view.layer.shadowOpacity = 0.5f;
view.layer.shadowPath = shadowPath.CGPath;

首先:作为shadowPath使用的UIBezierPath是至关重要的。如果您不使用它,一开始您可能不会注意到差异,但敏锐的眼睛会观察到在旋转设备和/或类似事件期间发生的一定滞后。这是一项重要的性能调整。

具体针对您的问题:重要的一行是view.layer.masksToBounds = NO。它禁用对延伸超过 View 边界的 View 层的子层的裁剪。

对于那些想知道 masksToBounds(在层上)和 View 自己的 clipToBounds 属性之间有什么区别的人:实际上没有任何区别。切换一个会对另一个产生影响。只是抽象级别不同。


swift 2.2:

override func layoutSubviews()
{
super.layoutSubviews()

let shadowPath = UIBezierPath(rect: bounds)
layer.masksToBounds = false
layer.shadowColor = UIColor.blackColor().CGColor
layer.shadowOffset = CGSizeMake(0.0, 5.0)
layer.shadowOpacity = 0.5
layer.shadowPath = shadowPath.CGPath
}

swift 3:

override func layoutSubviews()
{
super.layoutSubviews()

let shadowPath = UIBezierPath(rect: bounds)
layer.masksToBounds = false
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 0.0, height: 5.0)
layer.shadowOpacity = 0.5
layer.shadowPath = shadowPath.cgPath
}

关于ios - 向我的 UIView 添加阴影的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com