ios – 仅将CALayer阴影屏蔽到rect之外

前端之家收集整理的这篇文章主要介绍了ios – 仅将CALayer阴影屏蔽到rect之外前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我如何用阴影掩盖CALayer,以便阴影只在路径之外?我不希望透明视图背后的阴影.
  1. shadowLayer.shadowOffset = CGSizeMake(x,y);
  2. shadowLayer.shadowRadius = radius;
  3. shadowLayer.shadowOpacity = opacity;
  4. shadowLayer.shadowColor = color.CGColor;
  5. shadowLayer.shadowPath = [UIBezierPath bezierPathWithRect:view.bounds].CGPath;

谢谢.

解决方法

我会回答我自己的问题.为视图添加新的阴影层.如果设置正确,这应适用于任何shadowPath.
  1. float radius = 8;
  2. float opacity = 0.5f;
  3. float x = 4;
  4. float y = 6;
  5. UIColor *color = [UIColor blackColor];
  6.  
  7. // Shadow layer
  8. CALayer *shadowLayer = [CALayer layer];
  9. shadowLayer.shadowOffset = CGSizeMake(x,y);
  10. shadowLayer.shadowRadius = radius;
  11. shadowLayer.shadowOpacity = opacity;
  12. shadowLayer.shadowColor = color.CGColor;
  13. shadowLayer.shadowPath = [UIBezierPath bezierPathWithRect:view.frame].CGPath; // Or any other path
  14.  
  15. // Shadow mask frame
  16. CGRect frame = CGRectInset(view.layer.frame,-2*radius,-2*radius);
  17. frame = CGRectOffset(frame,x,y);
  18.  
  19. // Translate shadowLayer shadow path to mask layer's coordinate system
  20. CGAffineTransform trans = CGAffineTransformMakeTranslation(-view.frame.origin.x-x+2*radius,-view.frame.origin.y-y+2*radius);
  21.  
  22. // Mask path
  23. CGMutablePathRef path = CGPathCreateMutable();
  24. CGPathAddRect(path,nil,(CGRect){.origin={0,0},.size=frame.size});
  25. CGPathAddPath(path,&trans,shadowLayer.shadowPath);
  26. CGPathCloseSubpath(path);
  27.  
  28. // Mask layer
  29. CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
  30. maskLayer.frame = frame;
  31. maskLayer.fillRule = kCAFillRuleEvenOdd;
  32. maskLayer.path = path;
  33.  
  34. shadowLayer.mask = maskLayer;
  35.  
  36. [view.layer.superlayer insertSublayer:shadowLayer below:view.layer];

猜你在找的iOS相关文章