2008-09-27 41 views
7

Tôi đã cố gắng hiển thị văn bản bằng cách sử dụng ngữ cảnh Quartz, nhưng không có vấn đề gì tôi đã thử tôi chỉ đơn giản là không có may mắn nhận được văn bản để hiển thị (tôi có thể hiển thị tất cả các loại đối tượng Quartz khác) . Có ai biết tôi có thể làm gì sai không?Làm thế nào để hiển thị văn bản bằng cách sử dụng Quartz trên iPhone?

dụ:

-(void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSelectFont(context, "Arial", 24, kCGEncodingFontSpecific); 
    CGContextSetTextPosition(context,80,80); 
    CGContextShowText(context, "hello", 6); 
    //not even this works 
    CGContextShowTextAtPoint(context, 1,1, "hello", 6); 
}  

Trả lời

7

Đây là một đoạn mã mà tôi đang sử dụng.

UIColor *mainTextColor = [UIColor whiteColor]; 
[mainTextColor set]; 
drawTextLjust(@"Sample Text", 8, 50, 185, 18, 16); 

Và:

static void drawTextLjust(NSString* text, CGFloat y, CGFloat left, CGFloat right, 
          int maxFontSize, int minFontSize) { 
    CGPoint point = CGPointMake(left, y); 
    UIFont *font = [UIFont systemFontOfSize:maxFontSize]; 
    [text drawAtPoint:point forWidth:right - left withFont:font 
     minFontSize:minFontSize actualFontSize:NULL 
     lineBreakMode:UILineBreakModeTailTruncation 
     baselineAdjustment:UIBaselineAdjustmentAlignBaselines]; 
} 
+0

Nó phải là @ "Văn bản mẫu" làm chức năng mong đợi một NSString *. Nó hoạt động cho tôi nếu không, cảm ơn. Tuy nhiên tôi không thể tìm thấy tham chiếu đến hàm drawAtPoint, điều đáng lo ngại. – CiscoIPPhone

+1

drawAtPoint là một phần của danh mục UIKit NSString - http://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html – Hunter

9

OK, tôi đã nhận nó. Trước hết, thay đổi chế độ mã hóa của bạn thành kCGEncodingMacRoman. Thứ hai, chèn dòng này bên dưới nó:

CGContextSetTextMatrix(canvas, CGAffineTransformMake(1, 0, 0, -1, 0, 0)); 

Điều này đặt ma trận chuyển đổi cho văn bản sao cho văn bản được vẽ chính xác. Nếu bạn không đặt dòng đó vào, văn bản của bạn sẽ bị lộn ngược và quay lại phía trước. Không biết tại sao đây không phải là mặc định. Cuối cùng, hãy đảm bảo bạn đã đặt màu tô phù hợp. Đó là một sai lầm dễ dàng để thực hiện nếu bạn quên thay đổi từ màu nền cho màu văn bản và kết thúc bằng văn bản trắng-trắng.

+1

Nó không phải là mặc định vì chức năng này - và tất cả Quartz - hoạt động chính xác giống như trên iOS như trên OS X cho tính di động, nhưng vì lý do nào đó, chúng đảo ngược hệ thống tọa độ toàn hệ thống [mặc định] trên iOS. Trên máy Mac (0, 0) thấp hơn bên trái, trên iOS ở trên cùng bên trái. Nếu bạn đang chuyển mã Mac, bạn sẽ đảo ngược và định vị lại hệ tọa độ chỉ một lần trước khi thực hiện tất cả mã của bạn, thay vì nghĩ về nó cho mỗi nguyên thủy. – Tommy

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