博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[一句秒懂]UILabel首行插入网络图片
阅读量:5821 次
发布时间:2019-06-18

本文共 5188 字,大约阅读时间需要 17 分钟。

  hot3.png

 

175419_Z18V_2684046.gif

 

 

 

 

 

#import 
@interface YLLabel : UILabel@property(copy,nonatomic) NSString *networkImg; //需要插入的网络图片@property(strong,nonatomic) UIImage *localImg; //需要插入的本地图片@property(assign,nonatomic) NSInteger position; //需要插入的图片位置@property(assign,nonatomic) CGRect imgSize; //图片的大小@property(assign,nonatomic) CGFloat imgMargin; //图片的边距@property(copy,nonatomic) NSString *dcAttributedString; //文字@end
#import "YLLabel.h"@interface YLLabel()@property(strong,nonatomic) NSTextAttachment *attch;@property(strong,nonatomic) UIImage *networkImage;@property(strong,nonatomic) NSMutableAttributedString *ms;/** 内存缓存的图片 */@property (nonatomic, strong) NSMutableDictionary *images;/** 队列对象 */@property (nonatomic, strong) NSOperationQueue *queue;@end@implementation YLLabel- (void)setDcAttributedString:(NSString *)string {    _dcAttributedString =  string;}- (void)setLocalImg:(UIImage *)localImg {    [self insertMs:localImg];}/** * 插入图片 */-  (void)insertMs:(UIImage *)img {    _attch = [[NSTextAttachment alloc] init];    _attch.image = img;    _attch.bounds = _imgSize;    NSMutableAttributedString *ms = [[NSMutableAttributedString alloc]initWithString:_dcAttributedString];    NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:_attch];    [ms insertAttributedString:string atIndex:0];    self.attributedText = ms;    [self setPosition:_position];    [self setImgMargin:_imgMargin]; //重新处理图片的间距    }- (void)setNetworkImg:(NSString *)networkImg {    UIImage *image = self.images[networkImg];    if (image) {        _networkImage =  image;        [self insertMs:image];    } else {        NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];        NSString *filename = [networkImg lastPathComponent];        NSString *file = [cachesPath stringByAppendingPathComponent:filename];        NSData *data = [NSData dataWithContentsOfFile:file];        if (data) {            UIImage *image = [UIImage imageWithData:data];            [self insertMs:image];            _networkImage =  image;            self.images[networkImg] = image;        } else {            [self.queue addOperationWithBlock:^{                NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:networkImg]];                UIImage *image = [UIImage imageWithData:data];                [[NSOperationQueue mainQueue] addOperationWithBlock:^{                    _networkImage =  image;                    [self insertMs:image];                }];                self.images[networkImg] = image;                [data writeToFile:file atomically:YES];            }];        }    }}- (void)setImgSize:(CGRect)imgSize {    _imgSize = imgSize;}- (void)setPosition:(NSInteger)position {    _position = position;    if(_networkImage || _localImg) {                NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:_attch];        NSMutableAttributedString *ms =[[NSMutableAttributedString alloc]init];        ms = (NSMutableAttributedString *)self.attributedText;                 if(_dcAttributedString.length+1 == ms.length){        [ms replaceCharactersInRange:NSMakeRange(0, 1) withString:@""];        [ms insertAttributedString:string atIndex:position];         }    }    }- (void)setImgMargin:(CGFloat)imgMargin {     _imgMargin = imgMargin;    if(_networkImage || _localImg) {                       NSMutableAttributedString *ms =[[NSMutableAttributedString alloc]init];        ms = (NSMutableAttributedString *)self.attributedText;        self.attributedText = ms;                if(_dcAttributedString.length+1 == ms.length){                //创建透明图片        UIView * imageV = [[UIView alloc]init];        imageV.backgroundColor = [UIColor clearColor];        imageV.bounds = CGRectMake(0, 0, imgMargin, imgMargin);                //此为透明图片的边距        UIImage * image = [self imageWithUIView:imageV];        NSTextAttachment *attch = [[NSTextAttachment alloc] init];        attch.image = image;        attch.bounds = CGRectMake(0, 0, imgMargin, imgMargin);        NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attch];                if(_position == 0) {            [ms insertAttributedString:string atIndex:_position+1];        }else if(_position == ms.length-1){            [ms insertAttributedString:string atIndex:_position];        }else{            [ms insertAttributedString:string atIndex:_position];            [ms insertAttributedString:string atIndex:_position+2];        }        }    }}- (UIImage*) imageWithUIView:(UIView*) view{    UIGraphicsBeginImageContext(view.bounds.size);    CGContextRef currnetContext = UIGraphicsGetCurrentContext();    [view.layer renderInContext:currnetContext];    UIImage* image = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return image;}- (NSOperationQueue *)queue{    if (!_queue) {        _queue = [[NSOperationQueue alloc] init];        _queue.maxConcurrentOperationCount = 3;    }    return _queue;}- (NSMutableDictionary *)images{    if (!_images) {        _images = [NSMutableDictionary dictionary];    }    return _images;}@end

 

 

 

 

转载于:https://my.oschina.net/shengbingli/blog/653030

你可能感兴趣的文章
git的介绍及使用
查看>>
python-Selenium库的详解
查看>>
百度究竟有没有必要购买PPS?
查看>>
redisi配置安装
查看>>
基础知识(5)- 继承
查看>>
CSharp设计模式读书笔记(23):模板方法模式(学习难度:★★☆☆☆,使用频率:★★★☆☆)...
查看>>
用include()和ob_get_contents( )方法 生成静态文件
查看>>
ekho安装及测试(中文文字转语音)
查看>>
php判断 二维数组中 是否 存在某个一维数组
查看>>
day12 Python字典
查看>>
概率图模型之有向图与无向图之间的关系 I map D map perfect map(完美图) 概念...
查看>>
Python version 2.7 required, which was not found in the registry 问题解决
查看>>
dubbo源码分析11——服务暴露2_doExport()方法分析
查看>>
通用代码引擎生成工具 XDoclet 介绍
查看>>
闭包,闭包用途,call、apply、bind 的用法
查看>>
约会 倍增lca
查看>>
单元测试(Unit testing)
查看>>
UVA 810 A Dicey Promblem 筛子难题 (暴力BFS+状态处理)
查看>>
echarts图调用多个接口
查看>>
建筑装修保温(一)
查看>>