YYText使用
2017-04-25 本文已影响7896人
YKDog
结构
-
NSMutableString + YYText实例
YYText+add
NSMutableAttributedString *text = [NSMutableAttributedString new];
NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:@"Another Link"];
//设置字号
one.font = [UIFont boldSystemFontOfSize:30];
//设置字体颜色红色
one.color = [UIColor redColor];
//字体边框
YYTextBorder *border = [YYTextBorder new];
//边框圆角
border.cornerRadius = 50;
//边框边距
border.insets = UIEdgeInsetsMake(0, -10, 0, -10);
//边框线宽
border.strokeWidth = 0.5;
//边框颜色等于字体颜色
border.strokeColor = one.color;
border.lineStyle = YYTextLineStyleSingle;
one.textBackgroundBorder = border;
//高亮边框
YYTextBorder *highlightBorder = border.copy;
highlightBorder.strokeWidth = 0;
highlightBorder.strokeColor = one.color;
//填充颜色红色
highlightBorder.fillColor = one.color;
//设置高亮颜色
YYTextHighlight *highlight = [YYTextHighlight new];
[highlight setColor:[UIColor whiteColor]];
//高亮的背景框
[highlight setBackgroundBorder:highlightBorder];
//点击高亮回调
highlight.tapAction = ^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect) {
NSLog(@"高亮1");
};
[one setTextHighlight:highlight range:one.rangeOfAll];
-
tag制作
文字tag
NSMutableAttributedString *text = [NSMutableAttributedString new];
//设置文字
NSArray *tags = @[@"◉red", @"◉orange"];
for (int i = 0; i < tags.count; i++) {
NSString *tag = tags[i];
NSMutableAttributedString *tagText = [[NSMutableAttributedString alloc] initWithString:tag];
//插入空格
[tagText insertString:@" " atIndex:0];
[tagText appendString:@" "];
//文字颜色和字体
tagText.font = [UIFont boldSystemFontOfSize:16];
tagText.color = [UIColor whiteColor];
//边框
YYTextBorder *border = [YYTextBorder new];
border.strokeWidth = 1.5;
border.strokeColor = [UIColor redColor];
border.fillColor = [UIColor greenColor];
border.cornerRadius = 100;
border.insets = UIEdgeInsetsMake(-2, -5.5, -2, -8);
[tagText setTextBackgroundBorder:border range:[tagText.string rangeOfString:tag]];
//设置绑定的效果是成为一个整体一起操作 否则删除是一个一个字母删除
[tagText setTextBinding:[YYTextBinding bindingWithDeleteConfirm:NO] range:tagText.rangeOfAll];
[text appendAttributedString:tagText];
}
//创建YYTextView
YYTextView *textView = [YYTextView new];
textView.attributedText = text;
textView.size = self.view.size;
textView.height -= 64;
[self.view addSubview:textView];
-
文字附加
attachNSString *title = @"This is git attachment: "; [text appendAttributedString:[[NSAttributedString alloc] initWithString:title attributes:nil]]; YYImage *image = [YYImage imageNamed:@"niconiconi@2x.gif"]; image.preloadAllAnimatedImageFrames = YES; YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image]; imageView.autoPlayAnimatedImage = NO; imageView.size = CGSizeMake(100, 100); [imageView startAnimating]; [YYImageHelper addTapControlToAnimatedImageView:imageView]; [YYImageHelper addPanControlToAnimatedImageView:imageView]; NSMutableAttributedString *attachText = [NSMutableAttributedString attachmentStringWithContent:imageView contentMode:UIViewContentModeCenter attachmentSize:imageView.size alignToFont:font alignment:YYTextVerticalAlignmentBottom]; [text appendAttributedString:attachText]; [text appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n" attributes:nil]];
-
图文环绕
图文环绕UIImage *image = [[YYImage alloc] initWithData:data scale:2]; UIImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image]; imageView.clipsToBounds = YES; imageView.userInteractionEnabled = YES; imageView.layer.cornerRadius = imageView.height / 2; //核心: 通过设置textView 的exclusionPaths 在这个区域path内不会显示文字 imageView.center = CGPointMake(kScreenWidth / 2, kScreenWidth / 2); self.imageView = imageView; @weakify(self); UIPanGestureRecognizer *g = [[UIPanGestureRecognizer alloc] initWithActionBlock:^(UIPanGestureRecognizer *g) { @strongify(self); if (!self) return; CGPoint p = [g locationInView:self.textView]; self.imageView.center = p; UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.imageView.frame cornerRadius:self.imageView.layer.cornerRadius]; self.textView.exclusionPaths = @[path]; }]; [imageView addGestureRecognizer:g]; [self.textView addSubview:self.imageView]; UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.imageView.frame cornerRadius:self.imageView.layer.cornerRadius]; self.textView.exclusionPaths = @[path]; /// Set exclusion paths
-
文字绑定(把指定单位的字符集合到一起整体处理)
-
新建一个文本解析类, 继承自NSObject, 写入regex正则, 实现协议方方法。方法中如果对文本有改变返回YES,没有改变返回NO。
-
使用时候直接
textView.textParser = [YYTextExampleEmailBindingParser new];
-
协议方法在YYLabel或者YYTextView 文本改变调用
5月-04-2017 17-54-59
-
@interface YYTextExampleEmailBindingParser :NSObject <YYTextParser>
@property (nonatomic, strong) NSRegularExpression *regex;
@end
@implementation YYTextExampleEmailBindingParser
- (instancetype)init {
self = [super init];
NSString *pattern = @"[-_a-zA-Z0-9@\\.]+[ ,\\n]";
self.regex = [[NSRegularExpression alloc] initWithPattern:pattern options:kNilOptions error:nil];
return self;
}
//协议方法
- (BOOL)parseText:(NSMutableAttributedString *)text selectedRange:(NSRangePointer)range {
__block BOOL changed = NO;
NSLog(@"%@", text.string);
[_regex enumerateMatchesInString:text.string options:NSMatchingWithoutAnchoringBounds range:text.rangeOfAll usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
if (!result) return;
//根据结果来的 range
//0-16
NSRange range = result.range;
NSLog(@"-----%@------", NSStringFromRange(range));
if (range.location == NSNotFound || range.length < 1) return;
if ([text attribute:YYTextBindingAttributeName atIndex:range.location effectiveRange:NULL]) return;
NSRange bindlingRange = NSMakeRange(range.location, range.length - 1);
YYTextBinding *binding = [YYTextBinding bindingWithDeleteConfirm:YES];
[text setTextBinding:binding range:bindlingRange]; /// Text binding
[text setColor:[UIColor colorWithRed:0.000 green:0.519 blue:1.000 alpha:1.000] range:bindlingRange];
changed = YES;
}];
return changed;
}
@end
-
Annotation使用(查找添加位置添加)
rubyanotaion -
包括在上边加,后边下边加都是可以的
one = [[NSMutableAttributedString alloc] initWithString:@"日本語で書いた作文です。"];
one.font = [UIFont boldSystemFontOfSize:30];
ruby = [YYTextRubyAnnotation new];
ruby.textBefore = @"に";
[one setTextRubyAnnotation:ruby range:[one.string rangeOfString:@"日"]];