9

我有以下模仿 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];

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

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

在此处输入图像描述

4

3 回答 3

11

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

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

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

于 2012-02-17T22:24:50.403 回答
4

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

UIEdgeInsets contentInsets = UIEdgeInsetsMake(10, 0, 0, 0);
CGRect shadowPathExcludingTop = UIEdgeInsetsInsetRect(self.bounds, contentInsets);
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowPathExcludingTop].CGPath;
于 2014-04-17T10:02:59.150 回答
0

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

于 2012-02-17T23:12:52.480 回答