在view里画个空心圆,相当于遮罩出一个空心圆

看效果


方法一:

代码如下,自定义UIView,重写以下方法

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

    // Drawing code

    //在view里画个空心圆,相当于遮罩出一个空心圆

    CGFloatwidth =self.bounds.size.width;

    CGFloatheight =self.bounds.size.height;

    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0.f, 0.f, width, height) cornerRadius:1];

    CGFloatX =20;

    CGFloatR =MIN((width-2*X)/2, (height-2*X)/2);

    UIBezierPath *path1 = [[UIBezierPath bezierPathWithRoundedRect:CGRectMake(width/2-R, height/2-R, 2*R, 2*R) cornerRadius:R] bezierPathByReversingPath];

    [pathappendPath:path1];

    CAShapeLayer *layer1 = [CAShapeLayer layer];

    layer1.path= path.CGPath;

    layer1.strokeColor= [UIColorlightGrayColor].CGColor;

    layer1.fillColor= [UIColorredColor].CGColor;

    [self.layeraddSublayer:layer1];

}


方法二:

- (void)drawRect:(CGRect)rect {

    [superdrawRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGFloatradius =MIN(self.bounds.size.width,self.bounds.size.height)*0.5-60;

    UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds];

    CGFloattempY =NaviHeight+100;

    self.circleRect=CGRectMake((self.bounds.size.width-radius*2)*0.5, tempY, radius*2, radius*2);

    UIBezierPath *clipPath = [[UIBezierPath bezierPathWithRoundedRect:self.circleRect cornerRadius:radius] bezierPathByReversingPath];

    [pathappendPath:clipPath];

    CGContextAddPath(context, path.CGPath);

    CGContextSetFillColorWithColor(context, self.backColor.CGColor);

    CGContextFillPath(context);

}

你可能感兴趣的:(在view里画个空心圆,相当于遮罩出一个空心圆)