iOS:创建一侧的阴影

Posted

技术标签:

【中文标题】iOS:创建一侧的阴影【英文标题】:iOS: Create one sideded dropshadow 【发布时间】:2012-02-17 22:12:37 【问题描述】:

我有以下模仿 facebook 的菜单样式布局。我想在左侧有一个像下面这样的阴影,但是我使用的带有图层阴影的代码使应用程序滞后。我一直无法找到一个好的替代解决方案。有没有人可以替代创建不影响应用程序性能的阴影?

[self.navController.view.layer setShadowOffset:CGSizeMake(0, 1)];
[self.navController.view.layer setShadowColor:[[UIColor darkGrayColor] CGColor]];
[self.navController.view.layer setShadowRadius:8.0];
[self.navController.view.layer setShadowOpacity:0.8];

以上代码是我当前使用的导致应用程序性能问题的代码。

下图是我想要实现的,但不必使用上面的代码。

【问题讨论】:

【参考方案1】:

它应该有助于指定阴影路径,例如,

CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:self.navController.view.layer.bounds].CGPath;
[self.navController.view.layer setShadowPath:shadowPath]

根据CALayer documentation,“指定显式路径通常会提高渲染性能。”

【讨论】:

太棒了!这有很大帮助,但是我确实注意到了一些性能,但还不错。【参考方案2】:

您可以只插入视图边界并设置阴影路径:

UIEdgeInsets contentInsets = UIEdgeInsetsMake(10, 0, 0, 0);
CGRect shadowPathExcludingTop = UIEdgeInsetsInsetRect(self.bounds, contentInsets);
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowPathExcludingTop].CGPath;

【讨论】:

【参考方案3】:

我自己会添加一个包含该阴影的UIView 作为子视图,并在右侧的视图动画后立即重新定位它。 (例如,用图层或核心图形绘制阴影)

【讨论】:

以上是关于iOS:创建一侧的阴影的主要内容,如果未能解决你的问题,请参考以下文章

css 仅在一侧或两侧的箱子阴影

如何从一侧移除高程阴影而不从卡片或材质小部件中移除高程本身?

如何在TextView后面创建一个大的模糊阴影?

在 iOS 上使用 setBackgroundImage 时移除 UIButton 的阴影

iOS 如何从 UISlider 中删除发光/阴影

如何创建多个 Box 并且只更改一侧的纹理?