如何为一个UIView仅添加底部和右侧的阴影?

4

我正在考虑为UIView的底部和右侧添加阴影,但我发现所有的解决方案都是为一个视图的四个边添加阴影。有没有绕过这个问题的方法?

3个回答

20

你可以像这样使用 CAGradientLayer

CAGradientLayer *shadow = [CAGradientLayer layer];
shadow.frame = CGRectMake(-10, 0, 10, myView.frame.size.height);
shadow.startPoint = CGPointMake(1.0, 0.5);
shadow.endPoint = CGPointMake(0, 0.5);
shadow.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithWhite:0.0 alpha:0.4f] CGColor], (id)[[UIColor clearColor] CGColor], nil];
[myView.layer addSublayer:shadow];

你需要根据自己的需求更改frame。这个例子在视图的左侧沿着高度显示阴影。你也可以改变起点和终点来控制阴影的方向。


1
有没有一种方法可以使用CALayer的shadowOffset和shadowRadius来实现这个目标? - tom
我想你可以通过更改框架来实现这个。 - edc1591

1

我可以通过在视图底部和右侧添加两个带有拉伸阴影图像的UIImageView来实现。你不必用这些UIImageView覆盖整个视图,只需切割需要的部分即可。看一下iPhone上Twitter应用的颜色混合图层,我相信那些美丽的阴影是使用UIImageView创建的。而且这样可以节省系统资源。当然,你也可以使用CALayer来创建阴影,但我认为渲染阴影会消耗更多的系统资源,所以对我来说CALayer是第二选择。


0
UIBezierPath *shadowPath = [UIBezierPath 
bezierPathWithRect:self.yourViewObj.bounds];
self.yourViewObj.layer.masksToBounds = NO;
self.yourViewObj.layer.shadowColor = [UIColor blackColor].CGColor;//*** color you want for shadow
self.yourViewObj.layer.shadowOffset = CGSizeMake(5.0f, 5.0f);
self.yourViewObj.layer.shadowOpacity = 0.7f;
self.yourViewObj.layer.shadowPath = shadowPath.CGPath;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接