結(jié)構(gòu)
-
NSMutableString + YYText實例
YYText+add
NSMutableAttributedString *text = [NSMutableAttributedString new];
NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:@"Another Link"];
//設(shè)置字號
one.font = [UIFont boldSystemFontOfSize:30];
//設(shè)置字體顏色紅色
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;
//設(shè)置高亮顏色
YYTextHighlight *highlight = [YYTextHighlight new];
[highlight setColor:[UIColor whiteColor]];
//高亮的背景框
[highlight setBackgroundBorder:highlightBorder];
//點擊高亮回調(diào)
highlight.tapAction = ^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect) {
NSLog(@"高亮1");
};
[one setTextHighlight:highlight range:one.rangeOfAll];
-
tag制作
文字tag
NSMutableAttributedString *text = [NSMutableAttributedString new];
//設(shè)置文字
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]];
//設(shè)置綁定的效果是成為一個整體一起操作 否則刪除是一個一個字母刪除
[tagText setTextBinding:[YYTextBinding bindingWithDeleteConfirm:NO] range:tagText.rangeOfAll];
[text appendAttributedString:tagText];
}
//創(chuàng)建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]];
-
圖文環(huán)繞
圖文環(huán)繞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; //核心: 通過設(shè)置textView 的exclusionPaths 在這個區(qū)域path內(nèi)不會顯示文字 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正則, 實現(xiàn)協(xié)議方方法。方法中如果對文本有改變返回YES,沒有改變返回NO。
使用時候直接
textView.textParser = [YYTextExampleEmailBindingParser new];
-
協(xié)議方法在YYLabel或者YYTextView 文本改變調(diào)用
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;
}
//協(xié)議方法
- (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;
//根據(jù)結(jié)果來的 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:@"日"]];
?