J'ai empilé une UIView au-dessus d'un contrôleur existant dans le but de créer une couche de dégradé. Cependant, lorsque je charge la vue, la nouvelle UIView (naturellement) est au-dessus de tout.
Code pertinent:
class ViewController: UIViewController {
@IBOutlet weak var myGradientView: GradientView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidLayoutSubviews() {
self.myGradientView.gradientWithColors(UIColor.whiteColor(), UIColor.blueColor())
}
}
J'ai fait quelques recherches et j'ai trouvé ne réponse dans Objective-C qui explique l'utilisation:
[parentView bringSubviewToFront: view];
Je ne sais pas objectif-c et je suis assez nouveau pour Swift, si quelqu'un pouvait éclairer cela, je l'apprécierais.
Comment modifier l'index z ou l'ordre de pile d'un UIView dans Swift?
Je recommanderais de regarder dans le UIView
documentation , où sont énumérées plusieurs méthodes pour la manipulation de l'ordre des sous-vues:
bringSubviewToFront(_:) sendSubviewToBack(_:) removeFromSuperview() insertSubview(_:atIndex:) insertSubview(_:aboveSubview:) insertSubview(_:belowSubview:) exchangeSubviewAtIndex(_:withSubviewAtIndex:)
Dans votre situation, vous pouvez essayer:
self.view.sendSubviewToBack(myGradientView)
// self is your view controller in this case.
Sinon, étant donné que vous avez créé le myGradientView
dans IB, vous pouvez modifier la hiérarchie des vues pour modifier les vues apparaissant en haut. Voici une photo pour illustrer:
J'espère que ça t'as aidé.
la réponse ci-dessus de
bringSubviewToFront(_:) sendSubviewToBack(_:)
a changé:
Dans Swift 3.
view.sendSubview(toBack:yourUIView)
view.bringSubview(toFront:yourUIView)