Мне нужно добавить несколько видов эффектов на UIView, округляя верхние левые и верхние правые углы, белую границу и темную тень на закругленном угол кривой, как на картинке ниже: Как добавить верхние углы, верхнюю границу и верхнюю тень в UIView в то же время
Я создал класс MSHTablePaneCell унаследованный от UIView, а затем перекрытая его drawRect
метод:
static const CGFloat kCornerRadius = 15;
@implementation MSHTablePaneCell()
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:(UIRectCornerTopLeft |UIRectCornerTopRight) cornerRadii:CGSizeMake(kCornerRadius, kCornerRadius)];
// 1. mask round corner
CAShapeLayer *roundLayer = [CAShapeLayer layer];
roundLayer.path = path.CGPath;
roundLayer.frame = self.bounds;
// roundLayer.cornerRadius = 10.0;
self.layer.mask = roundLayer;
// 2. add border to round corner curve
UIBezierPath *topCurvepath = [UIBezierPath bezierPath];
[topCurvepath moveToPoint:CGPointMake(0, kCornerRadius)];
[topCurvepath addQuadCurveToPoint:CGPointMake(kCornerRadius, 0) controlPoint:CGPointMake(0, 0)];
[topCurvepath addLineToPoint:CGPointMake(CGRectGetWidth(self.frame)-kCornerRadius, 0)];
[topCurvepath addQuadCurveToPoint:CGPointMake(CGRectGetWidth(self.frame), kCornerRadius) controlPoint:CGPointMake(CGRectGetWidth(self.frame), 0)];
CAShapeLayer *topBorderLayer = [CAShapeLayer layer];
topBorderLayer.lineWidth = 4.0;
topBorderLayer.borderColor = [UIColor redColor].CGColor;
topBorderLayer.path = topCurvepath.CGPath;
[self.contentView.layer addSublayer:topBorderLayer];
}
@end
Однако, с кодом выше, я только что получил окончательное изображение, как показано ниже:
Независимо от того, какое свойство я устанавливаю, topCurvePath
просто отображается с черным цветом фона, как я могу исправить эту проблему? Заранее спасибо ~
Вы пытались установить BorderWidth, strokeColor, backgroudColor свойства вашего слоя? –
@AlexKosyakov yes ... ~~~~ (> _ <) ~~~~, но эти свойства не повлияли ... – qingqinghebiancao
topBorderLayer.fillColor = [UIColor yourColor] .CGColor? –