使用Swift在圈子UIView中的边框

时间:2015-08-20 00:28:19

标签: ios swift uiview uibezierpath

我试图用边框制作UIView,但我只是让它出现在UIView中,而不仅仅是在圆圈上。

sample

在棕色圆圈中,我想要一个黑色边框,但它必须位于UIView中的圆圈内。

我有一个名为Ball的课,我在那里画圆圈。

class Ball: UIView {

    var desiredColour = UIColor.blueColor()

    struct mine {
        static var p = UIBezierPath(ovalInRect: CGRectMake(0,0,118,117))

    }

    override func drawRect(rect: CGRect) {
        // Drawing code


        desiredColour.setFill()
        mine.p.fill()

    }


    func colour() {

        var randColor: UIColor = Colors.randomColor()

        Colors.ballColor = randColor
        Colors.colorPosition = find(Colors.arrayColors, randColor)!

        desiredColour = randColor
        self.setNeedsDisplay()

    }
}

我使用了代码:

override func drawRect(rect: CGRect) {
    // Drawing code


    desiredColour.setFill()

    let desiredBorderColor = UIColor.blackColor()
    desiredBorderColor.setStroke()

    self.layer.borderWidth  = 3.0
    self.layer.cornerRadius = self.frame.size.width/2.0

    mine.p.fill()
    mine.p.stroke()

}

但是我得到一个带有小切口的边框:

enter image description here

3 个答案:

答案 0 :(得分:8)

尝试通过将视图作为参数传递来调用此函数

func drawBlackBorder(view: UIView) {
        view.layer.borderColor = UIColor.blackColor
        view.layer.borderWidth = 1.0

        view.layer.cornerRadius = view.frame.size.width/2.0
       view.backgroundColor = UIColor.brownColor

    }

答案 1 :(得分:5)

override func drawRect(rect: CGRect) {
        // Drawing code


        desiredColour.setFill()

        let desiredBorderColor = UIColor.blackColor()
        desiredBorderColor.setStroke()

        mine.p.lineWidth = 2.0 //set to whatever you want

        mine.p.fill()
        mine.p.stroke()

    }

但请注意,对于边界工作,你需要在你周围留出一些空间。

执行以下操作。声明myBorderWidth(类型为CGFloat)属性,然后更改

static var p = UIBezierPath(ovalInRect: CGRectMake(0,0,118,117))

static var p = UIBezierPath(ovalInRect: CGRectMake(myBorderWidth/2,myBorderWidth/2,118-myBorderWidth/2,117-myBorderWidth/2))

您还可以通过将其声明为属性来删除myBorderWidth/2的重复内容。

答案 2 :(得分:0)

无需修改图层,只需根据边框的粗细设置UIBezierPath并设置适当的宽度即可(在Swift 4.2上进行了测试):

var fillColor: UIColor //circle color
var strokeColor: UIColor //border color
var borderWidth: CGFloat //border width

override func draw(_ rect: CGRect) {
    fillColor.setFill()
    strokeColor.setStroke()

    let circlePath = UIBezierPath(ovalIn: CGRect(x: borderWidth, y: borderWidth, width: rect.width - borderWidth*2, height: rect.height - borderWidth*2))
    circlePath.lineWidth = borderWidth

    circlePath.stroke()
    circlePath.fill()
}