swiftcalayer

How do I create a circle with CALayer?


I have the code below tested, but when I give it constraints it becomes a little small circle:

 override func drawRect(rect: CGRect) {
var path = UIBezierPath(ovalInRect: rect)
fillColor.setFill()
path.fill()

//set up the width and height variables
//for the horizontal stroke
let plusHeight:CGFloat = 300.0
let plusWidth:CGFloat = 450.0

//create the path
var plusPath = UIBezierPath()

//set the path's line width to the height of the stroke
plusPath.lineWidth = plusHeight

//move the initial point of the path
//to the start of the horizontal stroke
plusPath.moveToPoint(CGPoint(
  x:self.bounds.width/2 - plusWidth/2 + 0.5,
  y:self.bounds.height/2 + 0.5))

//add a point to the path at the end of the stroke
plusPath.addLineToPoint(CGPoint(
  x:self.bounds.width/2 + plusWidth/2 + 0.5,
  y:self.bounds.height/2 + 0.5))

}

Solution

  • Change radius and fillColor as you want. :)

    import Foundation
    import UIKit
    
    class CircleLayerView: UIView {
        var circleLayer: CAShapeLayer!
    
        override func draw(_ rect: CGRect) {
            super.draw(rect)
            if circleLayer == nil {
                circleLayer = CAShapeLayer()
                let radius: CGFloat = 150.0
                circleLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 2.0 * radius, height: 2.0 * radius), cornerRadius: radius).cgPath
                circleLayer.position = CGPoint(x: self.frame.midX - radius, y: self.frame.midY - radius)
                circleLayer.fillColor = UIColor.blue.cgColor
                self.layer.addSublayer(circleLayer)
            }
        }
    }