Personnalisé UIPageControl avec dot images
Quand j'en avais besoin pour personnalisé mon UIPageControl j'ai utilisé cette et cette solution.
Légèrement modifié par la nouvelle version de swift, nous avons :
class myPageControl: UIPageControl {
var activeImage: UIImage!
var inactiveImage: UIImage!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
activeImage = UIImage(named: "active.png")!
inactiveImage = UIImage(named: "inactive.png")!
}
func updateDots()
{
for i in 0 ..< self.subviews.count
{
let dot : UIImageView = imageViewForSubview(self.subviews[i])
if (i == self.currentPage) {
dot.image = activeImage
}
else {
dot.image = inactiveImage
}
}
}
func imageViewForSubview(view: UIView) -> UIImageView {
var dot: UIImageView? = nil
if (view.isKindOfClass(UIView)) {
for subview: UIView in view.subviews {
if (subview is UIImageView) {
dot = (subview as! UIImageView)
}
}
if dot == nil {
dot = UIImageView(frame: CGRectMake(0.0, 0.0, view.frame.size.width, view.frame.size.height))
view.addSubview(dot!)
}
}
else {
dot = (view as! UIImageView)
}
return dot!
}
func setPage(page: Int) {
super.currentPage = page
self.updateDots()
}
}
Mon problème est que je ne peux pas changer l'image lors du premier démarrage de l'application.
Il ne changera que lorsque la page est modifiée.
Dans viewDidLoad()
, j'ai ajouté setPage(0)
et updateDots()
, mais il n'y a pas de résultat. Que pouvais-je fait de mal?
Vous devez vous connecter pour publier un commentaire.
Swift 3.0 ... à vous de savoir si vous êtes OK avec l'acceptation du risque énoncé: "Modification de la sous-vues d'un contrôle existant est fragile".
Vous devrez appeler "updateDots()" dans viewDidAppear() et votre valueChanged gestionnaire pour le contrôle de page.
J'ai amélioré @CodenameDuchess réponse un peu. Vous pouvez également personnaliser les images sur xibs/story-boards.
Vous pouvez utiliser
UIStackView
pour obtenir l'effet que vous voulez.Mettre votre
activeImageView
et d'autresinactiveImageView
s enaStackView
. Qu'il suffit de changer l'indice deactiveImageView
dansscrollViewDidScroll(_:)
.ps. UIStackView de
insertArrangedSubview(_:at:)
juste les mises à jour de la pile de l'indice de la organisées sous-vue si elle est déjà dans le arrangedSubviews liste.