原文链接
参考链接一
参考链接二
在给view加阴影并且同时加圆角的时候,会遇到经典的masksToBounds问题,masksToBounds为YES或NO时,仅阴影或圆角生效,不能同时生效。为解决此问题,解决办法是加一层layer来实现。
要点:
1. shadow加到单独的layer上面,layer和view.layer同frame,并且是路经阴影额?,然后加到view的底层;
2. 在view的layer上面加cornerRadius。
具体如下:
PS:
1. label文案加阴影:
2. view加普通阴影:
3. view加普通路经阴影
参考链接一
参考链接二
在给view加阴影并且同时加圆角的时候,会遇到经典的masksToBounds问题,masksToBounds为YES或NO时,仅阴影或圆角生效,不能同时生效。为解决此问题,解决办法是加一层layer来实现。
要点:
1. shadow加到单独的layer上面,layer和view.layer同frame,并且是路经阴影额?,然后加到view的底层;
2. 在view的layer上面加cornerRadius。
具体如下:
-
/*
-
周边加阴影,并且同时圆角
-
*/
-
+ (void)addShadowToView:(UIView *)view
-
withOpacity:(float)shadowOpacity
-
shadowRadius:(CGFloat)shadowRadius
-
andCornerRadius:(CGFloat)cornerRadius
-
{
-
//////// shadow /////////
-
CALayer *shadowLayer = [CALayer layer];
-
shadowLayer.frame = view.layer.frame;
-
-
shadowLayer.shadowColor = [UIColor blackColor].CGColor;//shadowColor阴影颜色
-
shadowLayer.shadowOffset = CGSizeMake(0, 0);//shadowOffset阴影偏移,默认(0, -3),这个跟shadowRadius配合使用
-
shadowLayer.shadowOpacity = shadowOpacity;//0.8;//阴影透明度,默认0
-
shadowLayer.shadowRadius = shadowRadius;//8;//阴影半径,默认3
-
-
//路径阴影
-
UIBezierPath *path = [UIBezierPath bezierPath];
-
-
float width = shadowLayer.bounds.size.width;
-
float height = shadowLayer.bounds.size.height;
-
float x = shadowLayer.bounds.origin.x;
-
float y = shadowLayer.bounds.origin.y;
-
-
CGPoint topLeft = shadowLayer.bounds.origin;
-
CGPoint topRight = CGPointMake(x + width, y);
-
CGPoint bottomRight = CGPointMake(x + width, y + height);
-
CGPoint bottomLeft = CGPointMake(x, y + height);
-
-
CGFloat offset = -1.f;
-
[path moveToPoint:CGPointMake(topLeft.x - offset, topLeft.y + cornerRadius)];
-
[path addArcWithCenter:CGPointMake(topLeft.x + cornerRadius, topLeft.y + cornerRadius) radius:(cornerRadius + offset) startAngle:M_PI endAngle:M_PI_2 * 3 clockwise:YES];
-
[path addLineToPoint:CGPointMake(topRight.x - cornerRadius, topRight.y - offset)];
-
[path addArcWithCenter:CGPointMake(topRight.x - cornerRadius, topRight.y + cornerRadius) radius:(cornerRadius + offset) startAngle:M_PI_2 * 3 endAngle:M_PI * 2 clockwise:YES];
-
[path addLineToPoint:CGPointMake(bottomRight.x + offset, bottomRight.y - cornerRadius)];
-
[path addArcWithCenter:CGPointMake(bottomRight.x - cornerRadius, bottomRight.y - cornerRadius) radius:(cornerRadius + offset) startAngle:0 endAngle:M_PI_2 clockwise:YES];
-
[path addLineToPoint:CGPointMake(bottomLeft.x + cornerRadius, bottomLeft.y + offset)];
-
[path addArcWithCenter:CGPointMake(bottomLeft.x + cornerRadius, bottomLeft.y - cornerRadius) radius:(cornerRadius + offset) startAngle:M_PI_2 endAngle:M_PI clockwise:YES];
-
[path addLineToPoint:CGPointMake(topLeft.x - offset, topLeft.y + cornerRadius)];
-
-
//设置阴影路径
-
shadowLayer.shadowPath = path.CGPath;
-
-
//////// cornerRadius /////////
-
view.layer.cornerRadius = cornerRadius;
-
view.layer.masksToBounds = YES;
-
view.layer.shouldRasterize = YES;
-
view.layer.rasterizationScale = [UIScreen mainScreen].scale;
-
-
[view.superview.layer insertSublayer:shadowLayer below:view.layer];
-
}
效果:
1. label文案加阴影:
-
- (void)addShadowForPlaceHolder
-
{
-
if (!(_placeHolderLabel.text.length > 0)) {
-
return;
-
}
-
-
NSShadow *shadow = [NSShadow new];
-
shadow.shadowBlurRadius = 0.5f;
-
shadow.shadowOffset = CGSizeMake(0.0f, 0.5f);
-
shadow.shadowColor = [[UIColor blackColor] colorWithAlphaComponent:0.4f];
-
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:_placeHolderLabel.text attributes:@{NSShadowAttributeName : shadow}];
-
_placeHolderLabel.attributedText = attributedText;
-
}
2. view加普通阴影:
-
_descTextView = [UITextView new];
-
_descTextView.textColor = kCZUIWhiteColor;
-
_descTextView.font = _fontLarge;
-
_descTextView.scrollEnabled = NO;
-
_descTextView.text = _liveDesc;
-
_descTextView.translatesAutoresizingMaskIntoConstraints = NO;
-
_descTextView.delegate = self;
-
_descTextView.textContainerInset = UIEdgeInsetsZero;
-
CZ_SetUIViewBackgroundColor(_descTextView, _placeHolderLabel.backgroundColor);
-
_descTextView.enablesReturnKeyAutomatically = NO;
-
_descTextView.layer.shadowColor = [UIColor blackColor].CGColor;
-
_descTextView.layer.shadowOpacity = 0.4;
-
_descTextView.layer.shadowRadius = 0.5f;
-
_descTextView.layer.shadowOffset = CGSizeMake(0.0f, 0.5f);
-
_descTextView.layer.shouldRasterize = YES;
-
_descTextView.layer.rasterizationScale = CZ_MainScreen().scale;
3. view加普通路经阴影
-
- (void)addShadow:(UIView *)view
-
{
-
view.layer.shadowColor = [UIColor blackColor].CGColor;//shadowColor阴影颜色
-
view.layer.shadowOffset = CGSizeMake(0, 0);//shadowOffset阴影偏移,默认(0, -3),这个跟shadowRadius配合使用
-
view.layer.shadowOpacity = 0.3;//0.8;//阴影透明度,默认0
-
view.layer.shadowRadius = 2;//8;//阴影半径,默认3
-
-
//路径阴影
-
UIBezierPath *path = [UIBezierPath bezierPath];
-
-
float width = view.bounds.size.width;
-
float height = view.bounds.size.height;
-
float x = view.bounds.origin.x;
-
float y = view.bounds.origin.y;
-
-
CGPoint topLeft = view.bounds.origin;
-
CGPoint topRight = CGPointMake(x + width, y);
-
CGPoint bottomRight = CGPointMake(x + width, y + height);
-
CGPoint bottomLeft = CGPointMake(x, y + height);
-
-
CGFloat offset = 0.f;
-
[path moveToPoint:CGPointMake(topLeft.x - offset, topLeft.y - offset)];
-
[path addLineToPoint:CGPointMake(topRight.x + offset, topRight.y - offset)];
-
[path addLineToPoint:CGPointMake(bottomRight.x + offset, bottomRight.y + offset)];
-
[path addLineToPoint:CGPointMake(bottomLeft.x - offset, bottomLeft.y + offset)];
-
[path addLineToPoint:CGPointMake(topLeft.x - offset, topLeft.y - offset)];
-
-
//设置阴影路径
-
view.layer.shadowPath = path.CGPath;
-
}
-
评论
发表评论