Trong ứng dụng của tôi, tôi đang cố gắng hiển thị văn bản dọc theo một đường dẫn; điều này là tốt cho hầu hết các nhân vật nhưng không phải cho tiếng Nhật (hoặc bất cứ điều gì không mac-Roman). Tôi đã được khuyên nên sử dụng [NSString drawAtPoint] để hiển thị các ký tự chính xác trong CATiledLayer của tôi; tuy nhiên, chúng biến mất sau khoảng 5 giây. Trong thời gian này tôi có thể phóng to các lớp và họ quy mô đúng cách, nhưng họ dường như không nhận được cam kết với CATiledLayer như phần còn lại của văn bản thường là.Sử dụng phương pháp drawAtPoint của NSString thay cho các vấn đề CGContextShowGlyphsAtPoint
Trước khi tôi kết xuất, tôi kiểm tra chuỗi và quyết định xem có bất kỳ biểu tượng nào trong số chúng không thể hiển thị hay không. Nếu tôi có vấn đề, tôi sử dụng drawAtpoint thay thế:
if (!isFullyDisplayable)
{
CGContextShowGlyphsAtPoint(context, pt.x, pt.y, realGlyph, 1);
}
else {
// fall back on less flexible font rendering for difficult characters
NSString *b = [gv text];
NSString *c = [b substringWithRange:NSMakeRange(j,1)];
[c drawAtPoint:pt withFont:[UIFont fontWithName:@"Helvetica-Bold" size:16.0]];
}
Có ai có bất kỳ gợi ý nào về lý do văn bản biến mất không?
Ngay khi drawAtPoint được sử dụng kết xuất debug của tôi được tràn ngập:
<Error>: CGContextGetShouldSmoothFonts: invalid context
<Error>: CGContextSetFont: invalid context
<Error>: CGContextSetTextMatrix: invalid context
<Error>: CGContextSetFontSize: invalid context
<Error>: CGContextSetTextPosition: invalid context
<Error>: CGContextShowGlyphsWithAdvances: invalid context
Vì vậy, tôi đoán nó là một cái gì đó để làm với quản lý bối cảnh của tôi, nhưng tôi cho rằng nếu điều này là trong cùng một nơi như tôi sử dụng CGContextShowGlyphsAtPoint nó phải có bối cảnh chính xác đã?
Bạn nên đề cập rằng tính năng này chỉ hoạt động trên iOS 4.0 trở lên. Các tiện ích mở rộng đồ họa UIKit không an toàn với luồng trong các FW cũ hơn. – Split