2016-05-16 10 views
0

Мне нужно добавить несколько видов эффектов на UIView, округляя верхние левые и верхние правые углы, белую границу и темную тень на закругленном угол кривой, как на картинке ниже: enter image description hereКак добавить верхние углы, верхнюю границу и верхнюю тень в 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 

Однако, с кодом выше, я только что получил окончательное изображение, как показано ниже: enter image description here

Независимо от того, какое свойство я устанавливаю, topCurvePath просто отображается с черным цветом фона, как я могу исправить эту проблему? Заранее спасибо ~

+0

Вы пытались установить BorderWidth, strokeColor, backgroudColor свойства вашего слоя? –

+0

@AlexKosyakov yes ... ~~~~ (> _ <) ~~~~, но эти свойства не повлияли ... – qingqinghebiancao

+0

topBorderLayer.fillColor = [UIColor yourColor] .CGColor? –

ответ

0

topBorderLayer.fillColor = [UIColor yourColor] .CGColor

 Смежные вопросы

  • Нет связанных вопросов^_^