CAShapeLayer
を使用して円形インジケータを作成したいと思います。私はカスタムクラスでこれをやっているので、UIView
ごとに再利用することができます。カスタムクラスを使用して円形インジケータを作成するには幅と高さが大きすぎます
これは私が今のところ持っているものです。
class CircularIndicator: UIView {
var circularIndicator = CAShapeLayer()
override init(frame: CGRect) {
super.init(frame: frame)
configure()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configure()
}
func configure() {
let centerPoint = CGPoint(x: self.bounds.width/2, y: self.bounds.width/2)
let circleRadius = self.bounds.size.width/2
let circlePath = UIBezierPath(arcCenter: centerPoint, radius: circleRadius, startAngle: CGFloat(-0.5 * M_PI), endAngle: CGFloat(1.5 * M_PI), clockwise: true)
circularIndicator.path = circlePath.cgPath
circularIndicator.strokeColor = UIColor.blue.cgColor
circularIndicator.fillColor = UIColor.clear.cgColor
circularIndicator.lineWidth = 6
circularIndicator.strokeStart = 0
circularIndicator.strokeEnd = 1
self.layer.addSublayer(circularIndicator)
}
}
私は高さと幅のメインビューコントローラにUIView
を追加= 150私の問題は、私は、アプリケーションを実行すると、circleRadius
値が終わるということです円が大きくなる500である。
私は、self.bounds.witdh
またはself.bounds.height
は、このクラスを含むUIView
の値と等しいはずです。 これは間違っていますか?どのように私は幅と高さのために大きな値で終わるだろうか?
明らかに、私はlayoutSubViewsの中で半径の計算を行う必要があります。それから私は正しい値を得るでしょう。 – Kobe
あなたはロブの答えを受け入れるか、あなた自身の答えを掲示してそれを受け入れるべきですので、その質問は答えられたとマークされます。 –