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:创建一侧的阴影的主要内容,如果未能解决你的问题,请参考以下文章
如何从一侧移除高程阴影而不从卡片或材质小部件中移除高程本身?