J'ai créé une classe dans Swift pour animer le chargement du cercle en utilisant ce tutoriel https://www.raywenderlich.com/94302/implement-circular-image-loader-animation-cashapelayer, tout a bien fonctionné, mais quand j'essaie de changer la couleur de la course dans le contrôleur de vue dans lequel Je veux utiliser la classene peut pas changer une propriété de classe circulaire rapide Loader
class CircularLoaderView: UIView {
let circlePathLayer = CAShapeLayer()
var circleRadius: CGFloat = 20.0
var strokeColor = UIColor.whiteColor()
override init(frame: CGRect) {
super.init(frame: frame)
configure()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
configure()
}
func configure() {
progress = 0
circlePathLayer.frame = bounds
circlePathLayer.lineWidth = 10
circlePathLayer.fillColor = UIColor.clearColor().CGColor
circlePathLayer.strokeColor = strokeColor.CGColor
layer.addSublayer(circlePathLayer)
backgroundColor = UIColor.clearColor()
}
Puis je définir les propriétés
//LoadingRing
progressIndicatorView.removeFromSuperview()
progressIndicatorView.frame = actionView.bounds
progressIndicatorView.circleRadius = (recordButtonWhiteRing.frame.size.height - 10)/2
progressIndicatorView.progress = 0.0
progressIndicatorView.strokeColor = UIColor.init(red: 232/255.0, green: 28/255.0, blue: 45/255.0, alpha: 1)
Mais la course apparaît toujours blanche au lieu de la couleur nécessaire, S'il vous plaît toute aide!
Essayez 'UIColor (rouge: 232/255,0, etc.' au lieu de 'UIColor.init (Vous finissez par mettre à nouveau le terme 'progressIndicatorView' dans votre hiérarchie de vue visible? –
Oh, vous n'appelez' configure() 'que lorsque votre' CircularLoaderView' est * initialisé *, et c'est le bit que Définit 'circlePathLayer.strokeColor' en changeant la valeur de' strokeColor' après que cela n'affecte pas les valeurs de 'CAShapeLayer' sous-jacentes –
Vous devez généralement implémenter' didSet' sur 'circleRadius' et' strokeColor' de telle sorte qu'ils mettre à jour 'circlePathLayer'. (Je recommanderais aussi Mend rendre 'circlePathLayer' une propriété' private', pour empêcher les classes externes de le modifier.) – Rob