1. Qiita
  2. 投稿
  3. Objective-C

UILabelに画像を表示する

  • 82
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

UILabelにはNSAttributedStringが指定できるので画像も表示してみる。

NSAttributedStringで画像というとCoreTextあたりで場所を確保して自分で描画とか結構ややこしいんだけど、UILabelなどには結局使えない。その代わりNSTextAttachmentが付いたのでこれをつかって画像を表示してしまおうってお話。

こんな感じ
kobito.1385037314.031520.png

要はNSTextAttachmentを使ってNSAttributedStringに入れればよいというだけ。
かいつまんで書くと以下な感じ。

nsas+image.h


@interface NSMutableAttributedString (atimg)
-(void)insertImage:(UIImage*)image bounds:(CGRect)bounds atIndex:(NSUInteger)index;
@end

nsas+image.m


@implementation NSMutableAttributedString (atimg)

-(void)insertImage:(UIImage*)image bounds:(CGRect)bounds atIndex:(NSUInteger)index;

{
    NSTextAttachment *at = [[NSTextAttachment alloc] init];
    at.image = image;
    at.bounds = bounds;
    NSAttributedString *ns = [NSAttributedString attributedStringWithAttachment:at];
    // unicode : NSAttachmentCharacter = 0xFFFC

    [self insertAttributedString:ns atIndex:index];
}

@end

sample

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableAttributedString *as = [[NSMutableAttributedString alloc] initWithString:@"ミクさんフリフリ"];
    [as insertImage:[UIImage imageNamed:@"miku"] bounds:CGRectMake(-2, -10, 40, 40) atIndex:4];
    _lbl.attributedText = as;

}

boundsのorigin,sizeで位置や大きさの指定可能。
attributedTextで使えるってことはUITextViewなど、UIKitでNSAttributedStringが指定出来るものでは使用可能。

attachmentなUnicodeは0xFFFC (OBJECT REPLACEMENT CHARACTER) で用意してあるのよね。

こう面倒なことしなくても出したいだけならhtml->NSAttributedStringにimgでもいくのでは・・

Comments Loading...