86
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UILabelに画像を表示する

Last updated at Posted at 2013-11-21

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でもいくのでは・・

86
76
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
86
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?