zoukankan      html  css  js  c++  java
  • 介绍个图文混排的开源库

    M80AttributedLabel  (涉及版权问题请联系我删贴,xuym1992@163.com)

    一个非常不错的开源库!

    今天使用了一下,非常的方便,感觉还缺少多种表情的支持(表面来看,可能我没发现吧),于是加了上去:

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        M80AttributedLabel *label = [[M80AttributedLabel alloc]initWithFrame:CGRectZero];
        label.font = [UIFont systemFontOfSize:15.f];
        label.textColor = [UIColor purpleColor];
        label.backgroundColor = [UIColor lightGrayColor];
        label.lineSpacing = 0.0;
        
        // 加一张图片
        [label appendImage:[UIImage imageNamed:@"logo.jpg"]
                   maxSize:CGSizeMake(100, 100)
                    margin:UIEdgeInsetsMake(0, 100, 0, 0)
                 alignment:M80ImageAlignmentCenter];
        // 此文本内有很多种表情(中括号内)
        NSString *text  = @"
    有人问我为什么要去西藏
    谁都知道318这条天路难走又危险。[haha][haha][haha][haha]
    	我回答道:“是内心驱使我去那里,因为那里有高原雪山,有哈达。”
    为了此次骑行,我辞掉工作并准备了很久,终于在2014年7月1日和队友们踏上了征途。
    	除此之外[haha2]我喜欢骑行,其实并没有多么的热爱,就是喜欢而已,而318是每一位骑行者的终极梦想[haha][haha][haha]路途中困难重重,恶劣的天气[face37]以及物质的缺乏[face44][face43],每天都要骑上几十甚至几百公里。[haha]下雨下雪下冰雹最为艰苦,手指僵硬导致很难抓紧刹车把,很多时候一下坡就是一百多公里。无论怎么样,再多的苦难都是值得的,痛并快乐着[face39]。
    [haha][haha1][haha2][face44][face43]
    
      如果有一天我不见了,那我一定在西藏。[face41]
      如果有一天我不见了,那我一定在西藏。[face41]
      如果有一天我不见了,那我一定在西藏。[face41]";
        
        // 利用正则表达式找出文本内所有的表情名,也就是中括号里面的内容
        NSArray *emotes = [self match:text withRegex:@"(?<=\[).*?(?=\])"];
        
        // 在字符串内前后分别添加]和[,是为了方便找出表情两边的内容
        text = [NSString stringWithFormat:@"]%@[", text];
        // 如有换行,下面的正则表达式无法查出正确的内容(求高手帮忙写个咯),因此先把换行符转义了
        text = [text stringByReplacingOccurrencesOfString:@"
    " withString:@"\n"];
        // 找出表情两边的内容
        NSArray *texts  = [self match:text withRegex:@"(?<=\]).*?(?=\[)"];
        
        for (NSUInteger i = 0; i < [texts count]; i++) {
            NSString *s = [texts objectAtIndex:i];
            // 根据上面的转义替换成换行符,这样绘制的时候就能换行了
            s = [s stringByReplacingOccurrencesOfString:@"\n" withString:@"
    "];
            [label appendText:s];
            if (i < [texts count] - 1) {
                [label appendImage:[UIImage imageNamed:[emotes objectAtIndex:i]]
                           maxSize:CGSizeMake(20, 20)
                            margin:UIEdgeInsetsZero
                         alignment:M80ImageAlignmentBottom];
            }
        }
        // 获取label的size(参数是label的最大size)
        CGSize size = [label sizeThatFits:CGSizeMake(kScreenWidth, 600)];
        label.frame = CGRectInset(CGRectMake(5, 20, size.width - 5*2, size.height),0, 0);
        [self.view addSubview:label];
    }
    - (NSArray *)match:(NSString *)string withRegex:(NSString *)regex {
        NSError *error;
        NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regex
                                                                                           options:NSRegularExpressionCaseInsensitive
                                                                                             error:&error];
        NSArray *matchResults = [regularExpression matchesInString:string options:0 range:NSMakeRange(0, string.length)];
        NSString *tmpStr = @"";
        NSMutableArray *matchs = [NSMutableArray array];
        for (NSTextCheckingResult *match in matchResults) {
            NSRange matchRange = [match range];
            tmpStr = [string substringWithRange:matchRange];
    //        NSLog(@"=%@=", tmpStr);
            [matchs addObject:tmpStr];
        }
        return matchs;
    }

    演示Demo下载地址:demo下载地址 (Xcode 6.1.1 & iOS SDK 8.1)

    效果如图所示:

  • 相关阅读:
    Google glass GDK
    Google glass GDK
    Google glass GDK
    趣味开发
    Android
    Google glass GDK
    Google glass GDK
    Google glass GDK
    Android
    Google glass GDK
  • 原文地址:https://www.cnblogs.com/tianglin/p/4157696.html
Copyright © 2011-2022 走看看