版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.06.08 |
前言
YYText是一个专门处理文字的框架,有了它处理文字变得非常方便,这一篇我继续介绍YYText的使用方法,希望对大家能有所帮助。大家如感兴趣还可以参考:
1.YYText使用篇(一)
2.YYText使用篇(二)
3.YYText使用篇(三)
4.YYText使用篇(四)
5.YYText使用篇(五)
6.YYText使用篇(六)
一、YYText示例
下面我们看另外一个例子,先看代码。
#import "YYTextAttachmentExample.h"
#import "YYText.h"
#import "YYImage.h"
#import "UIImage+YYWebImage.h"
#import "UIView+YYAdd.h"
#import "NSBundle+YYAdd.h"
#import "NSString+YYAdd.h"
#import "YYTextExampleHelper.h"
#import "YYGestureRecognizer.h"
@interface YYTextAttachmentExample () <UIGestureRecognizerDelegate>
@property (nonatomic, strong) YYLabel *label;
@end
@implementation YYTextAttachmentExample
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[YYTextExampleHelper addDebugOptionToViewController:self];
NSMutableAttributedString *text = [NSMutableAttributedString new];
UIFont *font = [UIFont systemFontOfSize:16];
//第一行文字
{
NSString *title = @"This is UIImage attachment:";
[text appendAttributedString:[[NSAttributedString alloc] initWithString:title attributes:nil]];
UIImage *image = [UIImage imageNamed:@"dribbble64_imageio"];
image = [UIImage imageWithCGImage:image.CGImage scale:2 orientation:UIImageOrientationUp];
NSMutableAttributedString *attachText = [NSMutableAttributedString yy_attachmentStringWithContent:image contentMode:UIViewContentModeCenter attachmentSize:image.size alignToFont:font alignment:YYTextVerticalAlignmentCenter];
[text appendAttributedString:attachText];
[text appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n" attributes:nil]];
}
//第二行文字
{
NSString *title = @"This is UIView attachment: ";
[text appendAttributedString:[[NSAttributedString alloc] initWithString:title attributes:nil]];
UISwitch *switcher = [UISwitch new];
[switcher sizeToFit];
NSMutableAttributedString *attachText = [NSMutableAttributedString yy_attachmentStringWithContent:switcher contentMode:UIViewContentModeCenter attachmentSize:switcher.size alignToFont:font alignment:YYTextVerticalAlignmentCenter];
[text appendAttributedString:attachText];
[text appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n" attributes:nil]];
}
//第三行文字
{
NSString *title = @"This is Animated Image attachment:";
[text appendAttributedString:[[NSAttributedString alloc] initWithString:title attributes:nil]];
NSArray *names = @[@"001", @"022", @"019",@"056",@"085"];
for (NSString *name in names) {
NSString *path = [[NSBundle mainBundle] pathForScaledResource:name ofType:@"gif" inDirectory:@"EmoticonQQ.bundle"];
NSData *data = [NSData dataWithContentsOfFile:path];
YYImage *image = [YYImage imageWithData:data scale:2];
image.preloadAllAnimatedImageFrames = YES;
YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image];
NSMutableAttributedString *attachText = [NSMutableAttributedString yy_attachmentStringWithContent:imageView contentMode:UIViewContentModeCenter attachmentSize:imageView.size alignToFont:font alignment:YYTextVerticalAlignmentCenter];
[text appendAttributedString:attachText];
}
YYImage *image = [YYImage imageNamed:@"pia"];
image.preloadAllAnimatedImageFrames = YES;
YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image];
imageView.autoPlayAnimatedImage = NO;
[imageView startAnimating];
NSMutableAttributedString *attachText = [NSMutableAttributedString yy_attachmentStringWithContent:imageView contentMode:UIViewContentModeCenter attachmentSize:imageView.size alignToFont:font alignment:YYTextVerticalAlignmentBottom];
[text appendAttributedString:attachText];
[text appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n" attributes:nil]];
}
text.yy_font = font;
_label = [YYLabel new];
_label.userInteractionEnabled = YES;
_label.numberOfLines = 0;
_label.textVerticalAlignment = YYTextVerticalAlignmentTop;
_label.size = CGSizeMake(260, 260);
_label.center = CGPointMake(self.view.width / 2, self.view.height / 2);
_label.attributedText = text;
[self addSeeMoreButton];
[self.view addSubview:_label];
_label.layer.borderWidth = 0.5;
_label.layer.borderColor = [UIColor colorWithRed:0.000 green:0.463 blue:1.000 alpha:1.000].CGColor;
__weak typeof(_label) wlabel = _label;
UIView *dot = [self newDotView];
dot.center = CGPointMake(_label.width, _label.height);
dot.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
[_label addSubview:dot];
YYGestureRecognizer *gesture = [YYGestureRecognizer new];
gesture.action = ^(YYGestureRecognizer *gesture, YYGestureRecognizerState state) {
if (state != YYGestureRecognizerStateMoved) return;
CGFloat width = gesture.currentPoint.x;
CGFloat height = gesture.currentPoint.y;
wlabel.width = width < 30 ? 30 : width;
wlabel.height = height < 30 ? 30 : height;
};
gesture.delegate = self;
[_label addGestureRecognizer:gesture];
}
#pragma mark - Object Private Function
- (void)addSeeMoreButton
{
__weak typeof(self) _self = self;
NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"...more"];
YYTextHighlight *hi = [YYTextHighlight new];
[hi setColor:[UIColor colorWithRed:0.578 green:0.790 blue:1.000 alpha:1.000]];
hi.tapAction = ^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect) {
YYLabel *label = _self.label;
[label sizeToFit];
};
[text yy_setColor:[UIColor colorWithRed:0.000 green:0.449 blue:1.000 alpha:1.000] range:[text.string rangeOfString:@"more"]];
[text yy_setTextHighlight:hi range:[text.string rangeOfString:@"more"]];
text.yy_font = _label.font;
YYLabel *seeMore = [YYLabel new];
seeMore.attributedText = text;
[seeMore sizeToFit];
NSAttributedString *truncationToken = [NSAttributedString yy_attachmentStringWithContent:seeMore contentMode:UIViewContentModeCenter attachmentSize:seeMore.size alignToFont:text.yy_font alignment:YYTextVerticalAlignmentCenter];
_label.truncationToken = truncationToken;
}
- (UIView *)newDotView
{
UIView *view = [UIView new];
view.size = CGSizeMake(50, 50);
UIView *dot = [UIView new];
dot.size = CGSizeMake(10, 10);
dot.backgroundColor = [UIColor colorWithRed:0.000 green:0.463 blue:1.000 alpha:1.000];
dot.clipsToBounds = YES;
dot.layer.cornerRadius = dot.height / 2;
dot.center = CGPointMake(view.width / 2, view.height / 2);
[view addSubview:dot];
return view;
}
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
CGPoint p = [gestureRecognizer locationInView:_label];
if (p.x < _label.width - 20)
return NO;
if (p.y < _label.height - 20)
return NO;
return YES;
}
@end
二、实现效果
下面看一下这个例子的实现效果。
后记
个人觉着这些例子都很有意思,感兴趣的大家可以自己写写,其实还是很好玩的,希望对大家有所帮助。