J'utilise le code ci-dessous pour ajouter une couche de gradient à un Uibutton. Fonctionne bien mais le titre n'est plus visible. Est-ce que quelqu'un sait comment corriger?
4 Réponses :
ha! Poser une question et ensuite le trouver tout seul ... coïncidence. Je devais changer l'ordre. Après avoir attribué à la gradient, les propriétés de texte du bouton doivent être définies et non auparavant. Code fixe ici:
UIButton oAddressBtn = UIButton.FromType (UIButtonType.Custom); oAddressBtn.Frame = new RectangleF (0, 0, 150, 25); // Create a gradient for the background. CAGradientLayer oGradient = new CAGradientLayer (); oGradient.Frame = oAddressBtn.Bounds; oGradient.Colors = new CGColor[] { UIColor.FromRGB (170, 190, 235).CGColor, UIColor.FromRGB (120, 130, 215).CGColor }; // Assign gradient to the button. oAddressBtn.Layer.MasksToBounds = true; oAddressBtn.Layer.AddSublayer (oGradient); oAddressBtn.Layer.CornerRadius = 10; oAddressBtn.Layer.BorderColor = UIColor.FromRGB (120, 130, 215).CGColor; // Set the button's title. Alignment and font have to be set here to make it work. oAddressBtn.VerticalAlignment = UIControlContentVerticalAlignment.Center; oAddressBtn.Font = UIFont.FromName("Helvetica", 12); oAddressBtn.SetTitleColor (UIColor.White, UIControlState.Normal); oAddressBtn.SetTitle (sAddress, UIControlState.Normal);
J'ai trouvé une autre façon de résoudre le problème. N'utilisez pas d'API de calque.addsublayer, utilisez plutôt une API d'AttinDex et définissez l'index sur 0. (mon application est écrite dans OC et je ne connais pas l'API Swift ...)
Je n'ai aucune idée de la façon dont cela se fait à MonoTouch. Mais la réponse ci-dessous est la variante Obj-C pour une approche où vous n'avez pas à ajouter une sous-couche.
au lieu d'insérer une couche de gradient, vous pouvez également remplacer la méthode + coucheClass code> à Renvoie la classe code> Cagradientlayer code>. La couche du bouton est que de cette classe, et vous pouvez facilement définir ses couleurs, etc. P>
+ (Class)layerClass {
return [CAGradientLayer class];
}
C'est aussi une bonne solution, c'est que vous voulez un fond formé. Il suffit de remplacer cagradientlayer code> avec
Cashapelayer code>. Évite bien les tracas de la chahute avec les hiérarchies de la couche / de la vue interne d'Uibutton, qui entraîne souvent du texte ou des images disparaissant.
Une autre option est d'utiliser un pixate d'appel d'outils tiers. http://www.pixate.com/ Cet outil vous permet d'utiliser CSS3 et de définir les styles de contrôle iOS de cette façon. De cette façon, vous devez éliminer toutes les nuances de contrôle de bas niveau. P>
Utiliser maintenant et profitez vraiment de la familiarité. Un design peut construire le fichier CSS pour vous et vous seriez bon d'aller! P>
J'explore également Pixate. Comme comment cela fonctionne et essayant de trouver un flux de travail qui me convient et un designer.
Pour un bouton L'ajout de sous-couche n'a pas travaillé pour cela. Insertion de sous-couche sous la marque Titre a fonctionné pour moi. Voici le code de référence:
- (vide) AddGradentONButtonWithStartColor: (Uicolor *) StartColor MoyenColor: (Uicolor *) Moyenconcolor Andendcolor: (Uicolor *) Endcolor Furbutton: (UIBUTTON *) CustomButton Andtitle: (Nstring *) ButtontiTle { p> } p> appelez cette méthode à l'intérieur de la vue ViewDidAppear. p> Merci,
Ratneshwar p> p>