我如何用阴影掩盖CALayer,以便阴影只在路径之外?我不希望透明视图背后的阴影.
shadowLayer.shadowOffset = CGSizeMake(x,y); shadowLayer.shadowRadius = radius; shadowLayer.shadowOpacity = opacity; shadowLayer.shadowColor = color.CGColor; shadowLayer.shadowPath = [UIBezierPath bezierPathWithRect:view.bounds].CGPath;
谢谢.
解决方法
我会回答我自己的问题.为视图添加新的阴影层.如果设置正确,这应适用于任何shadowPath.
float radius = 8; float opacity = 0.5f; float x = 4; float y = 6; UIColor *color = [UIColor blackColor]; // Shadow layer CALayer *shadowLayer = [CALayer layer]; shadowLayer.shadowOffset = CGSizeMake(x,y); shadowLayer.shadowRadius = radius; shadowLayer.shadowOpacity = opacity; shadowLayer.shadowColor = color.CGColor; shadowLayer.shadowPath = [UIBezierPath bezierPathWithRect:view.frame].CGPath; // Or any other path // Shadow mask frame CGRect frame = CGRectInset(view.layer.frame,-2*radius,-2*radius); frame = CGRectOffset(frame,x,y); // Translate shadowLayer shadow path to mask layer's coordinate system CGAffineTransform trans = CGAffineTransformMakeTranslation(-view.frame.origin.x-x+2*radius,-view.frame.origin.y-y+2*radius); // Mask path CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path,nil,(CGRect){.origin={0,0},.size=frame.size}); CGPathAddpath(path,&trans,shadowLayer.shadowPath); CGPathCloseSubpath(path); // Mask layer CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = frame; maskLayer.fillRule = kCAFillRuleEvenOdd; maskLayer.path = path; shadowLayer.mask = maskLayer; [view.layer.superlayer insertSublayer:shadowLayer below:view.layer];
原文地址:https://www.jb51.cc/iOS/328741.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。