¿Cómo centrar el text en el medio de un círculo?

Hice una class circular, pero quiero poner text en el centro directo de la misma.

El tamaño de letra no debe importar, el text siempre debe aparecer en el centro.

Hasta ahora, simplemente he intentado valores arbitrarios hasta que está lo suficientemente cerca del centro. Tiene que haber una manera más fácil.

import UIKit class CircleView: UIView { let circleLayer: CAShapeLayer = CAShapeLayer() init(frame: CGRect, innerColor: CGColor = Colors.colorWithHexString("#858585").CGColor, rimColor: CGColor = UIColor.blueColor().CGColor) { super.init(frame: frame) self.backgroundColor = UIColor.clearColor() let circlePath = UIBezierPath(arcCenter: CGPoint(x: frame.size.width / 2.0, y: frame.size.height / 2.0), radius: (frame.size.width - 10)/2, startAngle: 0.0, endAngle: CGFloat(M_PI * 2.0), clockwise: true) // Setup the CAShapeLayer circleLayer.path = circlePath.CGPath circleLayer.fillColor = innerColor circleLayer.strokeColor = rimColor circleLayer.lineWidth = 5.0 // Don't draw the circle at start circleLayer.strokeEnd = 1.0 layer.addSublayer(circleLayer) } func animateCircle(duration: NSTimeInterval) { let animation = CABasicAnimation(keyPath: "strokeEnd") animation.duration = duration animation.fromValue = 0 animation.toValue = 1 // Do a linear animation animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) circleLayer.strokeEnd = 1.0 // Do the actual animation circleLayer.addAnimation(animation, forKey: "animateCircle") } requinetworking init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 

Suponiendo que tiene una propiedad UILabel en su vista llamada label ; puede establecer el valor center en el centro de su vista en el método layoutSubviews :

 override func layoutSubviews() { super.layoutSubviews() label.sizeToFit() label.center = self.convertPoint(self.center, fromView: self.superview) } 

Tenga en count que esto es mucho más fácil con Auto Layout , pero no podrá cambiar ningún cuadro o centro como el anterior:

 self.addConstraint(NSLayoutConstraint( item: label, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.CenterX, multiplier: 1.0, constant: 0.0)) self.addConstraint(NSLayoutConstraint( item: label, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0.0))