iphone - 给 CAShapeLayer 添加阴影,让里面保持透明

标签 iphone ios objective-c core-animation

我想为路径添加发光效果,例如 (OS X) 界面元素具有焦点时周围的蓝色发光。

我使用了一个带有(矩形)路径的 CAShapeLayer:

self.borderLayer = [CAShapeLayer layer];
CGPathRef path = CGPathCreateWithRect(self.bounds, NULL);
[self.borderLayer setPath:path];
CGPathRelease(path);

最后,这给了我一个透明的 UIView,它周围有一个边框。 (在我的具体案例中,它是一 strip 有附加动画的虚线,但这对于这个特定问题并不重要)

我试过 CALayer 的阴影属性,但它们总是会填满整个图层。

self.borderLayer.shadowPath = self.borderLayer.path;
self.borderLayer.shouldRasterize = YES;

我想要的是只有 UIViews 周围的线投下阴影,以便 UIView 的内部保持透明。

最佳答案

我在看到我想要的内部阴影而不是发光时遇到了类似的问题。我用两个 CALayer 解决了这个问题。一,在代码中,背景为“_bg”(在我的例子中是黑色,不透明度为 0.55)和白色边框。代码“_shadow”中的另一层具有清晰的背景并添加了发光效果。 _bg 是 _shadow 层的 subview 。这是相关代码:

_bg = [CALayer layer];
_shadow = [CALayer layer];

[self.layer insertSublayer:_shadow atIndex:0];
[_shadow addSublayer:_bg];

_bg.frame = self.bounds;
_bg.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:.55].CGColor;
_bg.cornerRadius=20.0;
_bg.borderColor=[UIColor whiteColor].CGColor;
_bg.borderWidth=2.0;

_shadow.frame=self.bounds;
_shadow.masksToBounds=NO;
_shadow.backgroundColor = [UIColor clearColor].CGColor;
_shadow.cornerRadius=3.0;
_shadow.shadowRadius=3.0;
_shadow.shadowColor=[UIColor whiteColor].CGColor;
_shadow.shadowOpacity=0.6;
_shadow.shadowOffset=CGSizeMake(0.0, 0.0);

关于iphone - 给 CAShapeLayer 添加阴影,让里面保持透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444413/

相关文章:

iphone - 如何观察单元格附件类型 UITableViewCellAccessoryCheckmark 是否被选中?

ios - UITabBarController 内的 UITableView 不工作

ios - 当 TableView 滚动时如何阻止 uitableviewcell 中的 uipangesturerecognizer

ios - 如何从 subView 开始获取 ViewController 实例

ios - 如何在 UITextFields 中设置验证

iphone - 打开 iTunes Store 以播放特定歌曲

iphone - 登录时的按钮操作 FBConnect API 中的按钮单击

ios - 在通话过程中打开应用程序时相机卡住

iphone - 应用程序可以找到有关当前在 iPhone/iPod Touch 上播放歌曲的信息吗?

objective-c - insertNewObjectForEntityForName :