CAGradientLayer & UIView
Jérémy
Membre
Bonjour à tous,
Je souhaiterais créé un dégradé de couleur dans une UIView se trouvant dans mon UIViewController.
Voici le code de ma vue :
import UIKit
@IBDesignable
class MyView: UIView {
func refreshInterface() {
self.form.layer.borderWidth = 1.7
gradientLayer.frame = self.layer.bounds
let colorTop: CGColor = UIColor(red: 26.0/255.0, green: 196.0/255.0, blue: 252.0/255.0, alpha: 1.0).CGColor
let colorBottom: CGColor = UIColor(red: 30.0/255.0, green: 67.0/255.0, blue: 244.0/255.0, alpha: 1.0).CGColor
gradientLayer.colors = [colorTop,colorBottom]
gradientLayer.locations = [0.0,1.0]
layer.insertSublayer(gradientLayer, atIndex: 0)
}
}
Le souci est que la couleur dégradée ne se positionne pas à l'endroit même de ma view mais légèrement sur le côté (voir screen). Comment puis-je faire pour que le fond vienne se placé sous ma vue ? J'ai rajouté un border pour que vous puissiez voir le décalage.
Pour information :
- j'ai fabriqué mes IHMs via Interface Builder
- la méthode refresh est appelée depuis la méthode viewDidLoad de mon UIViewController
override func viewDidLoad() {
super.viewDidLoad()
myView.refreshInterface()
}
Je vous remercie par avance pour vos réponses !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il faut simplement que tu redimensionne ton CAGradientLayer dans la meÌthode layoutSublayers de ta vue.
Pourrais-tu logguer/vérifier la frame quand tu créées le tout, et dans layoutSubView ou un truc du genre ?
Okay ! Donc en gros je ne bouge rien dans ma méthode refresh et dans la méthode layoutSublayers je mets un truc du genre :
Mais la méthode layoutSublayers est appelée automatiquement lorsque les dimensions de ma vue changent ? Ou c'est à moi à le gérer ?
Oui j'ai vérifié. Le problème (à mon avis) vient du fait qu'il se base sur les dimensions du décrites dans interface builder dont les fenêtres sont génériques...
La methode est appelé automatiquement. Tu n'as pas à t'embêter plus que ça.
D'accord. Le redimensionnement se verra à l'écran par les utilisateurs ? Il verra ma view se transformer en live ?
ça je ne saurai te dire avec certitude il va falloir que tu teste. Sinon pour explicitement désactiver les animations tu fais comme ça :
Merci beaucoup Pyroh !
Je vais tester ceci et je te dirai !
J'ai utilisé la méthode layoutSubviews (qui correspond à mon cas), et tout fonctionne pour le mieux.
Merci Pyroh pour ton aide !
Y'a pas de quoi va