2015-08-12 3 views
4

Я сделал класс круга, но хочу поместить текст в его прямой центр.Как центрировать текст в середине круга?

Размер шрифта не должен иметь значения, текст должен всегда отображаться в центре.

До сих пор я просто пробовал произвольные значения, пока он не окажется достаточно близко к центру. Должен быть более простой способ.

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") 
} 

required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 
} 
+1

Я не вижу в вашем коде текст _any_. Я что-то упускаю? – matt

ответ

3

Предполагая, что у вас есть UILabel свойства в вашей точке зрения имени label; Вы можете установить значение center в центре вашего зрения в layoutSubviews метод:

override func layoutSubviews() { 
    super.layoutSubviews() 

    label.sizeToFit() 
    label.center = self.convertPoint(self.center, fromView: self.superview) 
} 

Обратите внимание, что это намного проще с Auto Layout, но вы не сможете изменить любой кадр или центр, как выше:

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)) 
Смежные вопросы