底角半径和阴影仅在目标C中的UIView底部

时间:2017-04-23 12:16:41

标签: ios objective-c uiview

我想将半径添加到UIView的左下角和右下角,然后仅在同一个UIView的底部放阴影。 我已经完成了解决方案,其中所有角落都提供了半径,然后是阴影。这工作正常。但是当我使用UIBeizerPath向底角添加半径时,阴影属性似乎不起作用。 我正在使用Objective-C和XCode 8.1。 我该怎么办?

使用下面的代码底角得到它们的半径,但阴影属性不起作用。

UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)];

[testView setBackgroundColor:[UIColor yellowColor]];

// shadow
testView.layer.shadowColor = [UIColor colorWithRed:156.0f/255.0f green:153.0f/255.0f blue:153.0f/255.0f alpha:1.0f].CGColor;
testView.layer.shadowOffset = CGSizeMake(0.0f, 2.0f);
testView.layer.shadowRadius = 4.0f;
testView.layer.shadowOpacity = 0.5f;

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0.0, 0.0)];
[path addLineToPoint:CGPointMake(0.0, CGRectGetHeight(testView.frame))];
[path addLineToPoint:CGPointMake(CGRectGetWidth(testView.frame), CGRectGetHeight(testView.frame))];
[path addLineToPoint:CGPointMake(CGRectGetWidth(testView.frame), 0.0)];
testView.layer.shadowPath = path.CGPath;

//bottom corners radius
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:testView.bounds        
                                               byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight)         
                                                     cornerRadii:CGSizeMake(2.0, 2.0)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.view.bounds;
maskLayer.path  = maskPath.CGPath;
testView.layer.mask = maskLayer;

1 个答案:

答案 0 :(得分:1)

面具掩盖了阴影。你需要在另一个内部有两个视图。将遮罩应用于内部视图,将阴影应用于外部视图。