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;
}