簡體   English   中英

如何在-drawRect中繪制UILabel:?

[英]How to draw an UILabel in -drawRect:?

我必須在這里做所有這些瘋狂的坐標系轉換,或者是UILabel與-drawRect中的UIImageView繪圖不同:?

有一個名為- (void)drawTextInRect:(CGRect)rect的方法。

但是文檔說:“你不應該直接調用這個方法。這個方法只能由想要修改標簽文本的默認繪圖行為的子類覆蓋。”

所以? 如何在-drawRect中繪制它?

UILabel的不同之處在於您不需要手動繪制文本來改變它的呈現方式。 對UILabel進行子類化並重寫-drawTextInRect:是改變UILabel渲染方式的最快方法。 例如,

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

將為您在該UILabel中繪制的任何文本添加具有特定偏移,半徑和顏色(作為UIColor實例)的陰影。 有關此操作的示例,請參閱我為最近的課程放在一起的項目

但是,如果你想要做的只是在另一個視圖中繪制文本,弗拉基米爾的答案是要走的路。

如果在視圖中執行自定義繪圖,則不得繪制UILabel或其他UI元素,而是繪制文本本身。 NSString有幾種在當前上下文中繪制的方法(有關更多方法,請查看NSString的UIKit擴展文檔):

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

其實你可以做到。

試試這個:

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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM