UIView的最简单(矩形)投影阴影

6
我看过很多代码片段,但都过于复杂,对于简单的阴影效果而言,需要子类化UIView并使用quartz2d调用,或者我无法使它们起作用。我想在将其作为子视图添加到另一个视图上时(子视图来自我正在分配的另一个viewController - 我知道这可能不好,但没关系),只是想在该视图上执行此操作,不需要使用IB或任何东西。最简单/最常用的方法是什么?如果我希望它在iOS 4上运行,会有所不同吗?
1个回答

11

只需要导入<QuartzCore/QuartzCore.h>,并使用以下类似的片段即可:

self.viewAboutContainer.layer.shadowColor = [[UIColor blackColor] CGColor];
self.viewAboutContainer.layer.shadowOpacity = 0.7;
self.viewAboutContainer.layer.shadowRadius = 4.0;
self.viewAboutContainer.layer.shadowOffset = CGSizeMake(5.0f, 5.0f);    
self.viewAboutContainer.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.viewAboutContainer.bounds].CGPath;

2
同时确保 self.viewAboutContainer.clipsToBounds = NO。否则,阴影会落在视图外并被裁剪。 - Ken M. Haggerty
@Brayden,我已经使用“[myview.layer setShadowPath:[UIBezierPath bezierPathWithRect:myview.bounds].CGPath];”解决了性能问题。在纵向模式下,阴影和圆角效果都很好,并且滚动流畅。但是我的应用程序支持两种模式,当我更改方向时,阴影效果无法正常工作(阴影显示根据纵向视图的框架)。你有什么想法可以解决这个问题吗? - Hitarth
1
@VictorEngel viewAboutContainer 是任何 UIView 或继承 UIView(例如 UIImageView)的名称。该名称只是一个占位符。 - Brayden
@KenM.Haggerty 我一整天都在苦思冥想......但最终你让我开心起来 :) - Ayan Sengupta
@KenM.Haggerty,只有当您要应用阴影的视图是其他视图的子视图时,才需要设置clipsToBounds = NO - Hemang
@程序员,我不确定,但你可能需要在应用程序旋转后重新应用阴影。 - Hemang

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