2012年4月26日木曜日

UILabelに縁取りしたテキストを描画

昨日はUIImageViewに枠線をつけるやり方を紹介しましたが、今日はUILabelのテキスト部分を縁取りするやり方。
(UILabel自体に枠線をつける方法はUIImageViewと同じです)

まず、UILabelを継承したクラスを作成します。

それから外枠の色とサイズを設定できるようにヘッダーファイルを修正します。
@interface UIOutlineLabel : UILabel

@property (nonatomic, retain) UIColor *OutlineColor;
@property (nonatomic, assign) CGFloat OutlineWidth;

@end

次にソースファイルを修正します。
やり方としてはUILabelのもつ -drawTextInRect:rect をオーバーライドして縁取りします。
- (void)drawTextInRect:(CGRect)rect
{   
    CGSize shadowOffset = self.shadowOffset;
    UIColor *txtColor = self.textColor;
    
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(contextRef, OutlineWidth);
    CGContextSetLineJoin(contextRef, kCGLineJoinRound);
    
    CGContextSetTextDrawingMode(contextRef, kCGTextStroke);
    self.textColor = OutlineColor;
    [super drawTextInRect:CGRectInset(rect, OutlineWidth, OutlineWidth)];
    
    CGContextSetTextDrawingMode(contextRef, kCGTextFill);
    self.textColor = txtColor;
    [super drawTextInRect:CGRectInset(rect, OutlineWidth, OutlineWidth)];
    
    self.shadowOffset = shadowOffset;
}

あとはこれを使用するViewControllerで実装します。
InterfaceBuildeerを使って画面上にUILabelを貼付けて、そのラベルのIdentity inspectorを開きます。
Custom Classの部分でUIOutlineLabelを選択。

あとはこれを関連づけして色とサイズを指定するだけです。
[aDateLabel setOutlineColor:[UIColor whiteColor]];
[aDateLabel setOutlineWidth:5.f];






0 件のコメント:

コメントを投稿