在我的应用程序中,我需要一个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
}
}
效果很好,返回此结果:
我想知道如何隐藏这四个角,以便只有椭圆本身是严格可见的。有办法吗?
更新和解决方案
这是我找到的解决方案,在所有关于省略号的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)
}
}
给了我这个结果:
答案 0 :(得分:2)
您需要剪切路径,请查看CGContextClip