UIFont et Fonctionnalité OpenType

Bonjour,



Je rencontre un problème à  l'application d'une police de caractère de format otf sur un UILabel.

L'application en elle-même fonctionne, la typo est bel et bien appliquée au label et apparaà®t sans problème.



Cependant, cette typo est particulière et utilise des principes de ligatures entre les lettres suivant leur disposition, les unes par rapport aux autres.

Par exemple ( Voir ci-dessous ) le "s" n'aura pas la même ligature s'il est précédé du "a" ou du "o".



exempletypo.jpg



Ma question est donc :

Est-il possible d'activer, pour une UIFont, les fonctionnalité OpenType afin qu'elle puisse gérer ces particularité sur les font au format otf ?



Au cas où, voici la méthodes que j'ai utilisé pour créer et appliquer l'UIFont :


<br />
UIFont* maFont = [UIFont fontWithName:@&quot;maTypo&quot; size:30];<br />
monLabel.font = maFont;<br />






Merci par avance pour vos réponses,

Cordialement,

Réponses

  • CéroceCéroce Membre, Modérateur
    Sous quel OS testes-tu ? Le traitement du texte a beaucoup évolué sous iOS 6. (Les ligatures n'étaient pas gérées sous iOS 5).



    Il y a une vidéo de la WWDC 2012 à  ce sujet. Je ne saurais que trop te conseiller d'y jeter un oe“il.
  • AliGatorAliGator Membre, Modérateur
    +1 avec Céroce et la vidéo WWDC. C'est vrai qu'il y a beaucoup de choses de changé à  ce propos dans iOS6.



    Ceci dit, tu peux activer les ligatures sur une NSAttributedString (voir la doc ici). Malheureusement avant iOS6, la classe UILabel n'était pas capable d'afficher un NSAttributedString mais seulement des NSString standard... mais je ne peux que te recommander d'essayer ma classe OHAttributedLabel pour afficher une NSAttributedString dans toutes les versions d'iOS à  partir de iOS 3.2.



    Bon pour le coup des ligatures j'ai jamais testé, mais à  priori si tu crées une NSAttributedString avec ton texte et tu t'assures que l'attribut NSLigatureAttributeName est mis à  1, je pense que ça devrait marcher.
  • Désolé, j'avais oublié de précisé mon OS qui était sous 4.3 ( J'essaie de rendre l'application lisible sur multiples supports, moi-même je ne peux tester que sur un iPad 1 )



    Merci pour les informations, je vais voir concernant la Class dont tu parles, AliGator, ainsi que les NSAttributeString pour voir si je trouve un moyen de corriger ça.
  • AliGatorAliGator Membre, Modérateur
    Je suis allé un peu vite puisque NSLigatureAttributeName n'est dispo que depuis iOS6 justement.



    Si tu utilises ma classe OHAttributedLabel, qui utilise CoreText pour dessiner des NSAttributedStrings, il faut utiliser l'attribut [font=Courier, Consolas, monospace]kCTLigatureAttributeName[/font] plutôt.

    Je n'ai pas fait de méthode de commodité dans ma catégorie NSAttributedString+Attributes pour l'attribut de ligature, donc il faudra si besoin changer cet attribut avec la méthode [font=courier new,courier,monospace]addAttribute:value:range[/font] de NSMutableAttributedString.



    Ceci dit tu n'auras même peut-être pas besoin de changer la valeur de cet attribut, et pourra te contenter d'utiliser une NSAttributedString sans changer ses attributs par défaut, car la doc dit que l'attribut [font=Courier, Consolas, monospace]kCTLigatureAttributeName[/font] a déjà  la valeur 1 pour valeur par défaut !

    Donc au final si tu utilises juste OHAttributedLabel directement en remplacement de ton UILabel sans rien changer ça doit pouvoir marcher direct.

    (J'espère juste que CoreText sait charger dynamiquement des polices de caractères personnalisées comme UIKit sait le faire, je pense que oui mais je n'ai jamais testé)
Connectez-vous ou Inscrivez-vous pour répondre.