使用Quartz圆角并应用阴影

时间:2013-03-18 00:33:57

标签: objective-c uiview quartz-graphics

对此问题似乎有很多想法,以及SO问题。但是,有些人说某些代码有效。例如:

[self.layer setShadowOffset:CGSizeMake(1, 3)];
[self.layer setShadowOpacity:0.9];
[self.layer setShadowRadius:3.0f];
[self.layer setShouldRasterize:YES];

[self.layer setCornerRadius:12.0f];

[self.layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:12.0f] CGPath]];

应同时应用12.0f角半径和阴影。但它不起作用。当我使用这个代码时,我得到阴影,但没有角半径。

据我所知,这是因为我需要将clipsToBounds设置为YES。但是,这反过来否定了阴影。

我做错了什么或者上面的代码不起作用?

此外,人们说要克服这个问题的好方法是创建一个单独的阴影图层,然后添加它。

但是如何在UIView的drawRect中执行此操作:? - 示例代码会很棒!

谢谢!

1 个答案:

答案 0 :(得分:0)

您的代码看起来不错我已经尝试过您的代码,它可以和我一起使用。

确保rect中使用的[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:12.0f] CGPath]]是正确的,如果您使用黑色背景,则无法看到阴影。

我在我的代码中尝试了这个。这是工作代码.......

[self.EnterQtyView.layer setShadowOffset:CGSizeMake(1, 5)];
[self.EnterQtyView.layer setShadowOpacity:1.0];
[self.EnterQtyView.layer setShadowRadius:5.0f];
[self.EnterQtyView.layer setShouldRasterize:YES];
[self.EnterQtyView.layer setCornerRadius:12.0f];
[self.EnterQtyView.layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:self.EnterQtyView.frame cornerRadius:12.0f] CGPath]];

希望这会对你有帮助.................