読者です 読者をやめる 読者になる 読者になる

24/7 twenty-four seven

iOS/OS X application programing topics.

UILabelに影をつける

iPhone Objective-C Cocoa

UILabelに影をつけるには通常、shadowColorプロパティとshadowOffsetプロパティを設定します。


暗めの背景色で、shadowColorを白、shadowOffsetを下に1ピクセルずらすと、立体感のあるラベルになります。

label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake(0, 1);


shadowColorをグレー、shadowOffsetを縦横4ピクセルずらすと、次のようになります。

label.shadowColor = [UIColor grayColor];
label.shadowOffset = CGSizeMake(6, 6);


UILabelのプロパティでは、Blur効果のついた影(境界がぼやっとした影)を設定することはできません。
影にBlurを設定するにはQuartz 2DのCGContextSetShadow関数を使用します。

void CGContextSetShadow (
   CGContextRef context,
   CGSize offset,
   CGFloat blur
);


Quartzを使って描画するので、UILabelを継承してdrawRect:メソッドをオーバーライドします。

#import <UIKit/UIKit.h>

@interface ShadowStyleLabel : UILabel {
}

@end


@implementation ShadowStyleLabel

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextSetShadow(context, CGSizeMake(4.0f, -4.0f), 6.0f);
    [super drawRect:rect];
    CGContextRestoreGState(context);
}

@end