2010-04-23 32 views
10

Tôi cũng phải thực hiện tất cả các công cụ chuyển đổi hệ thống phối hợp điên rồ này tại đây hay là một UILabel khác với bản vẽ UIImageView trong -drawRect:?Làm thế nào để vẽ một UILabel in -drawRect :?

Có một phương pháp được gọi là - (void)drawTextInRect:(CGRect)rect cho điều đó.

NHƯNG tài liệu cho biết: "Bạn không nên gọi trực tiếp phương pháp này. Phương pháp này chỉ nên được ghi đè bởi các lớp con muốn sửa đổi hành vi vẽ mặc định cho văn bản của nhãn".

Vì vậy? Làm thế nào để vẽ nó sau đó in -drawRect :?

Trả lời

15

Nếu bạn thực hiện bản vẽ tùy chỉnh trong chế độ xem của mình, bạn không được vẽ UILabel hoặc phần tử giao diện người dùng khác mà thay vào đó, hãy tự vẽ văn bản. NSString có một số phương pháp để vẽ trong bối cảnh hiện nay (xem tài liệu mở rộng UIKit NSString của cho các phương pháp khác):

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font 
- (CGSize)drawAtPoint:(CGPoint)point withFont:(UIFont *)font 
+1

Hey Tôi đến từ iOS 7 và cả những phương pháp này đã được phản đối cùng với hầu hết các phương pháp NSString' 'vẽ. Bạn có biết làm thế nào 'drawAtPoint: withAttributes:' works? –

17

UILabel là khác nhau ở chỗ bạn không cần phải tự rút ra văn bản để thay đổi cách thức mà nó được trình bày. Phân lớp UILabel và ghi đè -drawTextInRect: là cách nhanh nhất để thay đổi cách hiển thị UILabel. Ví dụ:

- (void)drawTextInRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetShadowWithColor(context, shadowOffset, shadowRadius, [shadowColor CGColor]); 
    [super drawTextInRect:rect]; 
} 

sẽ thêm bóng với chênh lệch, bán kính và màu cụ thể (dưới dạng UIColor) cho bất kỳ văn bản nào bạn vẽ trong nhãn đó. Để biết ví dụ về hành động này, hãy xem a project I put together for a recent class.

Tuy nhiên, nếu những gì bạn đang muốn làm chỉ là vẽ văn bản trong một chế độ xem khác, câu trả lời của Vladimir là cách để đi.

+0

không may, làm theo cách của Vladimir sẽ không hoạt động tốt. UILabel có một số logic thông minh để tính toán kích thước thu nhỏ của văn bản khi nó không phù hợp với nhãn. Xem các câu hỏi khác của tôi, tôi không thể tái tạo logic đó do lỗi trong các phương thức được cung cấp. Nhưng cảm ơn anyways. – dontWatchMyProfile

+0

btw, liên kết của bạn có vẻ bị hỏng – dontWatchMyProfile

+0

@mystify - Rất tiếc, máy chủ web nhỏ bị trục trặc. Thử ngay bây giờ. –

0

Thực ra bạn có thể làm điều đó.

Hãy thử điều này:

UILabel *lblRef = [[UILabel alloc] initWithFrame:CGRectMake(x, y, width, height)]; 
lblRef.text = [refs objectAtIndex:barCount]; 
lblRef.adjustsFontSizeToFitWidth = TRUE; 
lblRef.adjustsLetterSpacingToFitWidth = TRUE; 
lblRef.textColor = self.color; 
[lblRef setTextAlignment:NSTextAlignmentCenter]; 
lblRef.backgroundColor = [UIColor clearColor]; 
[self addSubview:lblRef]; 
Các vấn đề liên quan