6
votes

Pas d'ombre / embossité sur Uibarbuttonitem

J'ai un problème avec un uibarbuttonitem personnalisé. Lorsque je crée un uibarbuttonitem personnalisé via xxx

Le bouton résultant n'a pas le look "gaufré", que les éléments du système réalisent en plaçant une ombre noire semi-transparente derrière leurs icônes.

gauche: élément système, droite: élément personnalisé

sur la gauche vous Voir l'élément "Organiser" de la barre du système, à droite du résultat du code d'en haut.

Créer l'ombre dans la ressource est inutile, car iOS / COCOA utilise uniquement le masque de l'image et rejette toutes les informations de couleur. .

intéressant, si je crée l'élément de bouton de barre dans l'interface-constructeur, il a l'air bien. Cependant, dans le contexte de mon problème, j'ai besoin de créer l'élément de bouton dans le code.


0 commentaires

3 Réponses :


7
votes

Je pense que la raison em> cela se produit est couverte par ces réponses à une autre question:

https: //stackoverflow.com/a/3476424/1210490 p>

https://stackoverflow.com/ A / 6528603/1210490 P>

UIBARBUTTNITMS se comportent différemment selon l'endroit où vous les attachez par programme. Si vous les attachez à une barre d'outils, ils deviendront des icônes de "relief" blanches. Si vous les attachez à une barre de navigation, ils ne le feront pas. P>

J'ai passé les dernières heures à écrire une fonction pour appliquer la barre d'outils UIBARBUTONITEM Styling à UIMAGES. c'est écrit en C # pour MonoTouch strong>, mais je suis sûr que vous serez capable de le modifier à obj-C Pas de problemo ... p> xxx pré>

Donc, un uibarbuttonitem qui ressemblait à ceci: p>

avant p>

créé à la place de la fonction ci-dessus, comme ceci: p>

UIBarButtonItem barButtonItem = new UIBarButtonItem(ApplyToolbarButtonStyling(UIImage.FromFile("MusicIcon.png")), UIBarButtonItemStyle.Plain, delegate {});


2 commentaires

Merci pour la lecture. En fait, cela me semble que comme Apple ait un problème d'incohérence là-bas. J'ai vérifié certaines applications par défaut et les quelques icônes dans les barres de navigation ont le look en relief (par exemple, l'icône Plus dans les contacts ou le bouton d'écriture dans les messages).


Mon Dieu, merci beaucoup pour cet effort élaboré. Malheureusement, je n'ai pas le temps d'intégrer cela dans notre version actuelle du produit, mais j'essaierai la prochaine version. Merci encore.



10
votes

Il existe une version de l'objectif-C du script de James Furey.

- (UIImage *)applyToolbarButtonStyling:(UIImage *)oldImage {
    float shadowOffset = 1;
    float shadowOpacity = .54;
    CGRect imageRect = CGRectMake(0, 0, oldImage.size.width, oldImage.size.height);
    CGRect shadowRect = CGRectMake(0, shadowOffset, oldImage.size.width, oldImage.size.height);
    CGRect newRect = CGRectUnion(imageRect, shadowRect);
    UIGraphicsBeginImageContextWithOptions(newRect.size, NO, oldImage.scale);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -(newRect.size.height));
    CGContextSaveGState(ctx);
    CGContextClipToMask(ctx, shadowRect, oldImage.CGImage);
    CGContextSetFillColorWithColor(ctx, [UIColor colorWithWhite:0 alpha:shadowOpacity].CGColor);
    CGContextFillRect(ctx, shadowRect);
    CGContextRestoreGState(ctx);
    CGContextClipToMask(ctx, imageRect, oldImage.CGImage);
    CGContextSetFillColorWithColor(ctx, [UIColor colorWithWhite:1 alpha:1].CGColor);
    CGContextFillRect(ctx, imageRect);
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}


0 commentaires

0
votes

Prenez note du décalage de l'ombre dans le script de James Furey. J'ai fait l'expérience suivante: xxx

ceci a été observé avec iOS 6.1 SDK.

(maintenant obsolète sous iOS 7)


0 commentaires