2011-04-27 20 views
14

Tôi đang cố gắng vẽ một số văn bản có phông chữ được tải xuống. Tôi đã xem tài liệu API và tìm kiếm trên Web. Tôi tìm thấy một giải pháp, nhưng vấn đề là nó chỉ áp dụng cho khung mức độ CoreGraphics. Vì vậy, tôi đã tìm kiếm một cách để chuyển đổi CGFont thành UIFont, nhưng không có cách nào để làm điều này.Tại sao UIFont và CGFont/CTFont được phân tách hoàn toàn?

Tôi nhận ra UIFontCGFont/CTFont được phân tách hoàn toàn, mặc dù chúng được tạo từ cùng một tệp phông chữ. CGFontCTFont có thể chuyển đổi từ/sang nhau, nhưng đối với UIFont, cách duy nhất là tạo lại các thuộc tính của nó như tên và kích thước. Và các mã áp dụng cũng được tách ra.

Ví dụ: CATextLayer chỉ chấp nhận CGFont/CTFont - không UIFont. Nhưng tất cả các điều khiển UIKit chỉ chấp nhận UIFont.

Tại sao sự tách biệt này tồn tại? Hoặc là tôi sai? (Bất kỳ cách nào để sử dụng một phông chữ tải trong UIKit lớp học?)

Trả lời

17

Câu trả lời ngắn: "Chỉ những người của Apple biết"

Câu trả lời chi tiết hơn, sau khi đào (đảo ngược) khuôn khổ một chút:

  • UIKit.framework không sử dụng ở tất cảCGFont loại
  • .210
  • UIKit.framework sử dụng thay vì CoreText CTFontGSFont ...
  • GSFont đến từ ... các GraphicsServices khuôn khổ riêng
  • GraphicsServices ... sử dụng CGFont

Vì vậy, đây là tôi đoán (Có thể là hoàn toàn sai):

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

    Ít nhất Về phông chữ, các kỹ sư của Apple đã thiết lập một lớp trừu tượng giữa UIKitCoreGraphics khuôn khổ, qua obscur GraphicsServices một.

  • iOS>iOS(Private)>Mac OSX:

    Tại sao họ đã làm điều này, tôi sẽ nói CoreGraphics, mà xuất phát từ Mac OSX, không phải là tối ưu cho các thiết bị iOS, và UIKit chỉ là iOS, họ đã thêm một lớp giữa cả hai apis. Hay nói chung họ lên kế hoạch một ngày để tách hoàn toàn UIKit khỏi CoreGraphics ... iOS từ Mac OSX ... Ai mà biết được! The folks táo không, trả lời ngắn gọn của tôi :)

Về sử dụng phông chữ tùy chỉnh với UIKit, bạn có thể quan tâm đọc this.

Các vấn đề liên quan