贝塞尔曲线绘制人脸框(框内全透明,框外半透明)

参考CropImage 制作截取头像框https://github.com/cokeduo/CropImage
https://www.jianshu.com/p/c883fbf52681

//贝塞尔曲线画4个弧度
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, kScreenWidth, kScreenHeight) cornerRadius:0];
    UIBezierPath *headerPath = [UIBezierPath bezierPath];
    headerPath.lineWidth = 2.0;
    headerPath.lineCapStyle = kCGLineCapRound;
    headerPath.lineJoinStyle = kCGLineJoinRound;
    [headerPath moveToPoint:CGPointMake(kScreenWidth/2, 80+STATUS_BAR_Y)];
    [headerPath addQuadCurveToPoint:CGPointMake(kScreenWidth*(1-0.75)/2+kScreenWidth*0.75, 80+STATUS_BAR_Y+kScreenWidth*0.35) controlPoint:CGPointMake(kScreenWidth*(1-0.75)/2+kScreenWidth*0.75, 80+STATUS_BAR_Y)];
    [headerPath addQuadCurveToPoint:CGPointMake(kScreenWidth/2, 80+STATUS_BAR_Y+kScreenWidth) controlPoint:CGPointMake(kScreenWidth*(1-0.75)/2+kScreenWidth*0.75, 80+STATUS_BAR_Y+kScreenWidth)];
    [headerPath addQuadCurveToPoint:CGPointMake(kScreenWidth*(1-0.75)/2, 80+STATUS_BAR_Y+kScreenWidth*0.35) controlPoint:CGPointMake(kScreenWidth*(1-0.75)/2, 80+STATUS_BAR_Y+kScreenWidth)];
    [headerPath addQuadCurveToPoint:CGPointMake(kScreenWidth/2, 80+STATUS_BAR_Y) controlPoint:CGPointMake(kScreenWidth*(1-0.75)/2, 80+STATUS_BAR_Y)];
    [headerPath stroke];
    [path appendPath:headerPath];
    [path setUsesEvenOddFillRule:YES];
    CAShapeLayer *fillLayer = [CAShapeLayer layer];
    fillLayer.path = path.CGPath;
    //中间透明
    fillLayer.fillRule = kCAFillRuleEvenOdd;
    //半透明效果
    fillLayer.fillColor = [UIColor colorWithHexString:@"0x000000" alpha:0.4].CGColor;
    [self.layer addSublayer:fillLayer];
    //绘制虚线边框
    CAShapeLayer *vertulLineLayer = [CAShapeLayer layer];
    vertulLineLayer.path = headerPath.CGPath;
    vertulLineLayer.strokeColor = [UIColor whiteColor].CGColor;
    vertulLineLayer.fillColor = [UIColor clearColor].CGColor;
    vertulLineLayer.lineCap = kCALineCapRound;
    vertulLineLayer.lineWidth = 2;
    vertulLineLayer.lineDashPattern = @[@8,@8];
    [self.layer addSublayer:vertulLineLayer];

你可能感兴趣的:(贝塞尔曲线绘制人脸框(框内全透明,框外半透明))