2011-04-27 12 views
14

Próbowałem narysować tekst z pobraną czcionką. Przejrzałem dokumentację API i przeszukałem sieć. Znalazłem rozwiązanie, ale problem polega na tym, że ma on zastosowanie tylko do struktury poziomu CoreGraphics. Więc szukałem sposobu przekonwertowania CGFont na UIFont, ale nie było sposobu, aby to zrobić.Dlaczego UIFont i CGFont/CTFont są całkowicie oddzielone?

Uświadomiłem sobie, że UIFont i CGFont/CTFont są całkowicie rozdzielone, mimo że są tworzone z tego samego pliku czcionki. CGFont i CTFont są wymienialne ze sobą nawzajem, ale dla UIFont jedynym sposobem jest odtworzenie za pomocą atrybutów takich jak nazwa i rozmiar. Odpowiednie kody są również oddzielone.

Na przykład CATextLayer akceptuje tylko CGFont/CTFont - no UIFont. Ale wszystkie kontrolki UIKit akceptują tylko UIFont.

Dlaczego ten rozdział istnieje? Czy ja się mylę? (Każda sposobem korzystania z pobranej czcionki w UIKit klas?)

Odpowiedz

17

Krótka odpowiedź: „Tylko ludzie Jabłko wie”

bardziej szczegółowej odpowiedzi, po wykopaniu (cofania) ram nieco:

  • UIKit.framework nie używa wcaleCGFont typu
  • UIKit.framework użycie zamiast CoreText CTFont i GSFont ...
  • GSFont pochodzi od ... do GraphicsServices prywatnej ramach
  • GraphicsServices ... używać CGFont

Więc tutaj jest moje przypuszczenie (może być całkowicie źle):

  • UIFont>GSFont (prywatny)>CGFont
  • UIKit>GraphicsServices>CoreGraphics:

    Przynajmniej chodzi czcionki, inżynierowie Apple utworzyły warstwę abstrakcji pomiędzy UIKit i CoreGraphics ram, poprzez obscur GraphicsServices jednym.

  • iOS>iOS(prywatny)>Mac OSX:

    Dlaczego zrobili to, powiedziałbym CoreGraphics, która pochodzi z systemu Mac OS X, nie była optymalna dla urządzeń iOS i UIKit będąc tylko systemem iOS, dodali warstwę między obydwoma apisami. Albo, bardziej ogólnie, planują pewnego dnia, aby całkowicie oddzielić UIKit od CoreGraphics ... iOS od Mac OSX ... Kto wie! Ludzie apple robi, moja krótka odpowiedź :)

O użyciu czcionek niestandardowych z UIKit, może być zainteresowany czytania this.