drawRect圆角

时间:2016-01-25 15:02:16

标签: ios swift core-graphics

我有UIVIew的代码:

override func drawRect(rect: CGRect) {

    let toolbarSize = CGFloat(UIDevice.currentDevice().userInterfaceIdiom == .Pad ? 0 : 54)

    let width = CGRectGetWidth(self.frame)
    let height = CGRectGetHeight(self.frame) - toolbarSize

    let heightSpan = floor(height / 2 - self.cropSize.height / 2)
    let widthSpan = floor(width / 2 - self.cropSize.width / 2)

    // fill outer rect
    UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).set()
    UIRectFill(self.bounds)

    // fill inner border
    UIColor(red: 1, green: 1, blue: 1, alpha: 0.5).set()
    UIRectFrame(CGRectMake(widthSpan - 2, heightSpan - 2, self.cropSize.width + 4,
        self.cropSize.height + 4))

    // fill inner rect
    UIColor.clearColor().set()
    UIRectFill(CGRectMake(widthSpan, heightSpan, self.cropSize.width, self.cropSize.height))
}

这会为我的UIView绘制一个带有白色边框的矩形,我想添加一个圆角半径来绘制圆圈。

是否可以这样做?

3 个答案:

答案 0 :(得分:4)

这对我很有用

    someImageView.layer.borderWidth = 1
    someImageView.layer.borderColor = UIColor.blackColor().CGColor
    someImageView.layer.cornerRadius = someImageView.frame.height/2
    someImageView.clipsToBounds = true

答案 1 :(得分:0)

带圆角的矩形:使用路径。

除非您想使用layer.cornerRadius将圆角应用于整个视图(最简单)或子层(最灵活),否则使用UIBezierPath绘制 roundedRect
高度为1/2的cornerRadius的正方形 roundedRect 最终为圆形或圆盘。

let path = UIBezierPath(roundedRect: innerRect,cornerRadius: 10)
path.fill()

3 roundRect随时可用:

let regular   = UIBezierPath(roundedRect: CGRect, cornerRadius: CGFloat)
let irregular = UIBezierPath(roundedRect: CGRect,
                        byRoundingCorners: UIRectCorner, cornerRadii: CGSize)
let oval      = UIBezierPath(ovalInRect: CGRect)

使用path.stroke()作为边框,path.fill()作为内容。

drawRect上下文中的示例:

// fill inner rect
UIColor.clearColor().set()
let innerRect = CGRectMake(widthSpan, heightSpan,
                           self.cropSize.width, self.cropSize.height)

// replace UIRectFill(innerRect) by:
let path = UIBezierPath(roundedRect: innerRect, cornerRadius: 10)
path.fill()

受到excellent讨论的启发:

UIBezierPath* path = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, 100, 100)
             cornerRadius: 10];
path.lineWidth = 1;
[UIColor.clearColor setStroke];
[path stroke];

答案 2 :(得分:0)

您可以使用awakeFromNib中的代码。 下面的代码对我来说非常有用

- (void)awakeFromNib {
// Initialization code
self.authorAvatar.layer.cornerRadius = self.authorAvatar.frame.size.width/2;
self.authorAvatar.clipsToBounds = YES;
}

我在自定义单元格中使用它。您也可以在自定义视图中使用相同的代码。