iOSのUILabelにアンダーラインを引く方法

iOS6以上の場合、 UILabel#attributedText で簡単にアンダーラインを引くことが出来ます。 プログラムだけではなく、storyboardでも UILabelTextplain から attributed に設定することで、表示されている文字1文字単位で Fontsパネル から簡単に変更可能です。

../../../_images/attributed_text_config.png

iOS5以下(iOS5でしか確認していませんが)の場合は、 UIView#drawRectCG* 系のライブラリを使ってガリガリ書く必要があります。

static const CGFloat kPaddingWidth = 10.0;
static const CGFloat kPaddingHeight = 5.0;
static const CGFloat kLineWidth = 1.0;
static const CGFloat kRGBRed = 0.5;
static const CGFloat kRGBGreen = 0.5;
static const CGFloat kRGBBlue = 0.5;
static const CGFloat kRGBAlpha = 1.0;

-(void)drawRect:(CGRect)rect
{
    [super drawRect:rect];

    //drawing underline
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(context, kRGBRed, kRGBGreen, kRGBBlue, kRGBAlpha);
    CGContextSetLineWidth(context, kLineWidth);
    CGContextMoveToPoint(context, rect.origin.x + kPaddingWidth, rect.origin.y+rect.size.height - kPaddingHeight);
    CGContextAddLineToPoint(context, rect.origin.x+rect.size.width - kPaddingWidth, rect.origin.y+rect.size.height - kPaddingHeight);
    CGContextStrokePath(context);
}

最初 drawRect でがんばって書いてその後 attributedText に気づいたのは私ですが何か(涙)?

tigrcのログで時間にロケールを加味された時間が表示されるようにする

tig 便利ですね。愛用させて頂いています。

ところで、便利なtigなのですがコミットログを確認していると時間の表示にロケールが考慮されておらずタイムラインの時間が前後して見えるケースがあります。

たとえば、あるコミットログはこうなっていて

commit hogepiyo
Refs: drafts
Author:     user1
AuthorDate: Mon Dec 3 11:20:55 2012 +0900
Commit:     user1
CommitDate: Mon Dec 3 11:20:55 2012 +0900

別のコミットログはこうなっています。

commit hoge
Refs: drafts
Author:     user2
AuthorDate: Mon Dec 3 11:30:55 2012 +0000
Commit:     user2
CommitDate: Mon Dec 3 11:20:55 2012 +0000

これはタイムラインで確認すると、

2012-11-30 11:20 user1            │ o user1のコミット
2012-11-30 02:40 user2            │ o user2のコミット

という風に見えてしまいます。

解決方法

これを回避してローカル時間で表示を行う為には、 ~/.tigrc というファイルを作成した上でで以下の設定を書く必要があります。 .tigrc はtigの設定ファイルですね。

set show-date = local

こうすることでローカル時間で統一されて表示されます。

なお、この説明は man tigrc で確認出来ます(man tig だと欲しい説明が全然なくて焦りました(汗))。

以上です。