2010-08-23 26 views

Trả lời

27
CGFontRef cgFont = CGFontCreateWithFontName((CFStringRef)uiFont.fontName); 
+2

không tính đến kích thước phông chữ. Bạn cần phải làm điều đó bằng tay. –

+0

Điều này cũng yêu cầu cầu nối nếu bạn đang sử dụng ARC. Sử dụng một cái gì đó như sau làm việc cho tôi: 'CGFontRef cgFont = CGFontCreateWithFontName ((__ cầu CFStringRef) uiFont.fontName);' – sammarks

-1

Bạn đang hỏi một câu hỏi trong chủ đề và có vẻ như một câu hỏi khác trong cơ thể. Tôi sẽ trả lời câu hỏi trong chủ đề.

Bạn có thể chỉ đơn giản là bỏ UIFont * để một CGFontRef như thế này:

UIFont *font = [UIFont fontWithName:@"Helvetica" size:10.0]; 
CGFontRef cgFont = (CGFontRef) font; 

Tôi chưa khẳng định nếu điều này là cách chính thức để làm điều đó nhưng nó làm việc cho tôi.

Cập nhật:

Đó là một nguyên nhân hơi lạ đôi khi nó hoạt động nhưng đôi khi nó không hoạt động. Ví dụ, công trình này:

CGContextSetFont(context, (CGFontRef) font); 

Nhưng điều này không:

CTFontCreateWithGraphicsFont((CGFontRef) font, 10.0, nil, nil); 
+0

Tài liệu của Apple cho CATextLayer đặc biệt nói rằng bạn không thể sử dụng một trường hợp UIFont nơi một CGFontRef được yêu cầu. Điều này đặt ra câu hỏi liệu CGFontRef/UIFont có thực sự là cầu nối miễn phí (tôi đoán không?) – Adam

+0

'CGContextSetFont (ngữ cảnh, (CGFontRef) font)' không hoạt động với tôi - nó âm thầm thất bại, ngay cả khi tôi thêm ' __bridge' để biến nó thành "cầu nối" – AlexChaffee

0

Trong Swift 4 CGFontRef đã được đổi tên thành CGFont. Chuyển đổi khá dễ dàng

let font: CGFont? = CGFont(uiFont.fontName as CFString)

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