UIBezierPath & CAShapeLayer

版权声明:知识版权是属于全人类的! 欢迎评论与转载!!! https://blog.csdn.net/zhuge1127/article/details/82389764

UIBezierPath可以绘制你想要的所有图形, 因为其基于GPU的绘制相对于drawRect方法在移动设备上的优势更加明显

这里写图片描述

实现代码
这里写图片描述

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIView *v = [UIView new];
    v.frame = CGRectMake(100, 100, 200, 60);
    [self createMaskLayer:v];
    v.backgroundColor = [UIColor redColor];
    [self.view addSubview:v];
}


- (void)createMaskLayer:(UIView *)view {
    CGFloat viewWidth = CGRectGetWidth(view.frame);
    CGFloat viewHeight = CGRectGetHeight(view.frame);
    CGFloat rightSpace = 8;
    CGFloat topSpace = 10; 
    CGFloat radiusSpace = 8; //圆半径

    CGPoint point1 = CGPointMake(radiusSpace, topSpace);
    CGPoint point2 = CGPointMake(viewWidth - rightSpace, topSpace);
    CGPoint point3 = CGPointMake(viewWidth, 0);
    CGPoint point4 = CGPointMake(viewWidth, viewHeight);
    CGPoint point5 = CGPointMake(0, viewHeight);
    CGPoint point6 = CGPointMake(0, topSpace + radiusSpace);
    CGPoint radiusCenter1 = CGPointMake(radiusSpace, topSpace+radiusSpace);


    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:point1];
    [path addLineToPoint:point2];
    [path addLineToPoint:point3];
    [path addLineToPoint:point4];
    [path addLineToPoint:point5];
    [path addLineToPoint:point6];
    [path addArcWithCenter:radiusCenter1 radius:radiusSpace startAngle:M_PI endAngle:(270/180.0f)*M_PI clockwise:YES];

    [path closePath];
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.path = path.CGPath;
    view.layer.mask = maskLayer;
}

猜你喜欢

转载自blog.csdn.net/zhuge1127/article/details/82389764