2016-05-16 1 views
0

Je dois ajouter plusieurs types d'effets sur un UIView en arrondissant ses coins supérieur gauche et supérieur droit, sa bordure blanche et son ombre noire sur son arrondi. courbe de coin comme l'image ci-dessous: enter image description hereComment ajouter en même temps des coins supérieurs, des bordures supérieures et des ombres supérieures à un UIView

J'ai créé une classe MSHTablePaneCell héritée de UIView et overrided sa méthode 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 

Cependant, avec le code ci-dessus, je viens de recevoir l'image finale comme ci-dessous: enter image description here

Peu importe la propriété que j'ai définie, le topCurvePath vient d'être affiché avec une couleur de fond noire, comment puis-je résoudre ce problème? Merci à l'avance ~

+0

Avez-vous essayé de définir les propriétés borderWidth, strokeColor, backgroudColor de votre couche? –

+0

@AlexKosyakov oui ... ~~~~ (> _ <) ~~~~ mais ces propriétés n'ont eu aucun effet ... – qingqinghebiancao

+0

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

Répondre

0

topBorderLayer.fillColor = [UIColor yourColor] .CGColor