2012-11-03 15 views
6

soru:Yazı tipi adını değiştirmek yerine NSFont'un font-weight veya font stilini doğrudan ayarlayabilir miyiz? ön

doğrudan bir atfedilen dize için font-weight ve yazı tarzı bilgisini erişebilir mi? Veya bu bilgiyi ayarlayabileceğimiz yeni bir dizi oluşturabilir miyiz?

açıklama:

iOS 6'da, siz kalın veya italik bir seçim geçiş yapabilirsiniz. Ancak, bu yöntem işe yaramıyor: Apple'ın bize maruz kaldığı NSFontAttributeName (örneğin HelveticaNeue'den "HelveticaNeue-Bold" 'a kadar font adını değiştirmiyor). Bunun yerine, font-ailesini "Helvetica Neue" olarak korur ve stil dizgisinde kalın olan "font-weight" değerini değiştirir. onun açıklaması için atfedilen metnin bir örneğini sormak olsaydı, onun yazı bilgi için böyle bir şey olur:

NSFont = "<UICFFont: 0x1fbc53a0> font-family: \"Helvetica Neue\"; font-weight: bold; font-style: normal; font-size: 16px"; 

bu bir sorun oluşturur. Kalın ve italik stil bilgilerini korurken yazı tipini değiştiremeyiz. Tarz bilgisi için eski atıfta bulunulan dizgiyi taramanın çemberi içinden atlarsanız, yeni bir yazı tipiyle yeni bir dize oluşturarak font öznitelik adını değiştirirseniz (örneğin, istediğiniz her yer için "Courier-Bold" kullanarak) bold), yeni bir sorun yaratırsınız: fontu normal olarak (kalın değil) tekrar açmaya çalışırsanız, bunun yerine "Courier-Bold" gibi bir font ismine sahip olursunuz. stil bilgisi henüz kalın olarak ayarlanmamıştı. Ve değiştirme, elbette yazı tipi adını değiştirmeyecektir. Dolayısıyla, kullanıcı seçilen metni değiştirdiğinde artık değiştirilemeyen bir yazı tipi oluşturdunuz. Kullanıcı, bağlamsal menüdeki "kalın" düğmesine basacaktır, ancak hiçbir şey yapmayacaktır, çünkü cesurluk artık font adının içine kodlanmıştır, diyebilirsiniz.

Başka bir yoldan giderseniz ve UITextView'unuzda "toggleBoldface" ve "toggleItalic" seçeneklerini geçersiz kılmaya çalışırsanız, stil dizesindeki stil bilgilerinin değiştirilmesinin gerçekten önlenmesi mümkün görünmüyor. Geçiş olayı sırasında yazı tipi adını değiştiremezsiniz.

Soru: Yine de, bir şekilde font-weight ve font stili bilgilerine doğrudan erişebilir miyiz? Veya bu bilgiyi ayarlayabileceğimiz yeni bir dizi oluşturabilir miyiz? Bu, bir yazı tipinden diğerine geçiş yapmaya ve stil bilgisini koruma sorununu çözer.

Ve çifte açıklama:

Biz iOS bahsediyoruz. Bazı karakter dizileri için bir öznitelik dizgisinin font özniteliğini (NSFontAttributeName) ayarladığınızda, dahili olarak iOS bir stil dizgisine sahip bir NSFont oluşturur. Bir yazı tipi özniteliğini kendiniz belirlediyseniz, stil dizgisi "font-weight: normal; font-style: normal" ifadesini okuyacaktır. Ancak bu stil dizgisi, bir UITextView'da (geçiş yaparak) kalın ve italik bilginin saklandığı yerdir. Eğer nitelik tuşları kCTFontWeightTrait ve/veya kCTFontSymbolicTrait için değer ayarladığınız bir CTFontAttributesRef kullanarak yeni CTFontRef oluşturmak mümkün olabilir gibi

+0

Sorunuzdaki bir şeyi en az bir kez daha düzenlemeniz gerekir: NSFont MacOS içindir, UIFont *** ise iOS içindir; hangi mimariyi kullanıyorsunuz ve/veya hangi font sınıfını kullanıyorsunuz? –

+0

Korkarım ki bu doğru değil. Öznitelikli dizginiz için bir öznitelik olarak bir NSFontAttributeName (bir UIFont belirleyerek) oluşturursunuz ve dahili olarak iOS bunu bir NSFont'a dönüştürür. Bu nedenle, NSLog'u kullanarak açıklama için atıfta bulunulan bir metin sorarsanız, okuyacağınız "NSFont" yazan kod. –

+0

Daha spesifik olarak, NSFont bilgileri, açıklaması için bir NSAttributedString soruyorsanız okuyacağınız bölümün bir parçasıdır. –

cevap

1

görünüyor. Bu yardımcı olur mu?

cf. Bu işe yaramaz CTFontDescriptorReference ve CTFontReference

DÜZENLEME

Guess - Daha kendim içine baktı ...başkasının aynı fikri olması durumunda bunu burada bırakıyorum.

+0

Bir kez oluşturulduğunda, bir NSAttributedString'e nasıl uygulanabilir? Örneğin, öznitelikler sözlüğü oluşturduğumda, NSFontAttributeName değerini ayarlarken bir UIFont yerine kullanılabilir mi? –

+0

Oh, inanıyorum ki bu soruya cevap veriyor: CTFont'u UIFont'a dönüştürmek. http://stackoverflow.com/questions/6714858/iphone-convert-ctfont-to-uifont Bir sorun varsa geri bildireceğim veya eğer işe yararsa cevabı kabul edeceğim. Ama sanırım beni takip ediyorsun. Teşekkürler. –

+0

Nihayetinde bunun işe yarayacağını düşünmüyorum. Anladığım kadarıyla (ve bazı girişimlerden sonra), CoreText fontlarını bir UITextView'da kullanamazsınız. Bu konuda yanlış mıyım? –

İlgili konular