如何在绘制曲线时隐藏矩形轮廓

时间:2015-12-16 08:38:25

标签: ios swift quartz-2d ellipse

在我的应用程序中,我需要一个UIView,其形状最初是一个圆形,但随后可以通过更改其高度或宽度将其更改为椭圆形。所以,我已经覆盖了drawRect()方法,如下所示:

override func drawRect(rect: CGRect) {
    if (self.isRound) {
        let ctx:CGContext = UIGraphicsGetCurrentContext()!
        CGContextSetRGBStrokeColor(ctx, 0.0, 0.0, 0.0, 1.0)
        CGContextSetLineWidth(ctx, 0.5)
        CGContextAddEllipseInRect(ctx, rect)
        CGContextStrokePath(ctx)
        self.layer.cornerRadius = frame.size.width / 2
    }
}

效果很好,返回此结果:

enter image description here

我想知道如何隐藏这四个角,以便只有椭圆本身是严格可见的。有办法吗?

更新和解决方案

这是我找到的解决方案,在所有关于省略号的Apple Core Graphics函数中查找here。首先,如果我的UIView应该是一个椭圆,那么在我的构造函数中,我采用以下关于alpha参数的技巧:

if (self.isRound) {
        self.backgroundColor = UIColor(red: 0.0, green: 0.6, blue: 1.0, alpha: 0.0)
    }
else {
        self.backgroundColor = UIColor(red: 0.0, green: 0.6, blue: 1.0, alpha: 0.4)
    }

这样就完全没有显示背景矩形。然后,这是我的drawRect()方法:

override func drawRect(rect: CGRect) {
    if (self.isRound) {
        let ctx:CGContext = UIGraphicsGetCurrentContext()!
        CGContextSetRGBFillColor(ctx, 0.0, 0.6, 1.0, 0.4) /*!!!*/
        CGContextFillEllipseInRect(ctx, rect) /*use Fill and not Stroke */
        CGContextStrokePath(ctx)
    }
}

给了我这个结果:

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要剪切路径,请查看CGContextClip