参考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];

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐