2009-03-19 31 views
8

Khi vẽ chuỗi bằng drawAtPoint :, drawInRect: và thậm chí đặt thuộc tính văn bản của UILabels - văn bản đôi khi có thể xuất hiện hơi nhòe.drawAtPoint: và drawInRect: văn bản mờ

Tôi có xu hướng sử dụng Helvetica ở hầu hết các địa điểm và tôi nhận thấy rằng kích thước phông chữ cụ thể gây ra một số mức độ nhòe xảy ra, cả trong trình mô phỏng và trên thiết bị.

Ví dụ:

UIFont *labelFont = [UIFont fontWithName:@"Helvetica-Bold" size:12]; 

có gây ra nhãn kết quả để có văn bản hơi mờ.

UIFont *labelFont = [UIFont fontWithName:@"Helvetica-Bold" size:13]; 

Kết quả bằng văn bản rõ nét.

Câu hỏi của tôi là tại sao điều này xảy ra? Và nó chỉ là vấn đề chọn kích thước phông chữ tối ưu cho một kiểu chữ? Nếu vậy, kích thước phông chữ tối ưu là gì?

CẬP NHẬT: Có vẻ như đó không phải là kích thước phông chữ gây ra sự mờ nhạt. Nó có thể là trung tâm của rect là một điểm phân đoạn. Đây là nhận xét tôi tìm thấy trên diễn đàn Apple dev:

Kiểm tra vị trí. Nó có khả năng trên một pixel phân cách . Thay đổi trung tâm thành giá trị số nguyên.

Tôi làm tròn giá trị của tất cả các điểm, nhưng vẫn còn những nơi văn bản vẫn bị mờ. Có ai gặp vấn đề này trước đây không?

+0

Xem câu trả lời của tôi ở đây: http://stackoverflow.com/a/16822238/308315 – iwasrobbed

Trả lời

9

Tôi đã giải quyết vấn đề này.

Chỉ cần đảm bảo rằng điểm hoặc trực tiếp mà bạn đang vẽ không xuất hiện trên pixel phân số.

I.e. NSLog(@"%@", NSStringFromCGRect(theRect)) để xác định điểm nào đang được vẽ trên pixel phân số. Sau đó, gọi round() vào thời điểm đó.

+0

chìa khóa cho vấn đề là đúng, mặc dù làm tròn không phải là kỹ thuật tốt nhất. Rất nhiều vòng thực sự có thể thay đổi hoặc thay đổi kích cỡ khung hình. Cách tiếp cận tốt nhất là lưu trữ khung gốc làm thuộc tính và sau đó đặt lại. Điều đó đảm bảo không có thay đổi hoặc đổi kích thước –

2

Tha thứ sự thiếu hiểu biết của tôi nếu điều này không đúng, tôi không biết gì về iPhone hoặc Cocoa.

Nếu bạn yêu cầu văn bản được đặt ở giữa, bạn cũng có thể cần đảm bảo chiều rộng và/hoặc chiều cao của chữ nhật là số chẵn.

+0

Cảm ơn. Tôi làm tròn tất cả các điểm và chiều rộng và chiều cao. Cũng làm tròn các điểm cho thuộc tính trung tâm. Vẫn không có súc sắc. –

3

Bạn có thể muốn xem NSIntegralRect(), nó thực hiện những gì bạn muốn.

+1

NSIntegralRect() chỉ dành cho máy Mac chứ không phải iOS. – azdev

+1

Bạn đang sử dụng đúng [CGRectIntegral()] (https://developer.apple.com/library/IOs/documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html#//apple_ref/c/func/ CGRectIntegral) thay thế. – EightyEight

0

Từ các thử nghiệm của tôi, một số phông chữ không hiển thị rõ ràng ở các kích thước nhất định. ví dụ. Helvetica-Bold không hiển thị "." tốt ở 16.0f, nhưng chúng rõ ràng ở 18.0f. (Nếu bạn nhìn kỹ, điểm ảnh trên cùng của "." Bị mờ.)

Sau khi tôi nhận thấy điều đó, tôi đã bị lúng túng mỗi khi tôi thấy UIView, vì nó được hiển thị động.

2

Tôi cũng gặp vấn đề này, nhưng giải pháp của tôi khác và có thể giúp ai đó. Vấn đề của tôi là làm mờ văn bản sau khi thay đổi kích thước của đối tượng UIView qua TouchesBeganCGAffineTransformMakeScale, sau đó quay lại CGAffineTransformIdentity trong TouchesEnded.

Tôi đã thử cả kích thước văn bản khác nhau và làm tròn các điểm trung tâm x và y nhưng không hoạt động. Giải pháp cho vấn đề của tôi là sử dụng các kích thước thậm chí cho chiều rộng và chiều cao của UIView !!

Hope this helps ....

+0

Điều này đã giúp tôi, cảm ơn! – Mike

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