iOS 不规则排版UILabel示例
2021-10-16 本文已影响0人
楠楠小胖纸
继承自UILabel
的YQLabel
的.m
文件
#import "QYLabel.h"
#import <CoreText/CoreText.h>
@implementation QYLabel
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1, -1);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 0);
CGPathAddLineToPoint(path, NULL, self.frame.size.width - 40, 0);
CGPathAddLineToPoint(path, NULL, self.frame.size.width - 40, 40);
CGPathAddLineToPoint(path, NULL, self.frame.size.width, 40);
CGPathAddLineToPoint(path, NULL, self.frame.size.width, self.frame.size.height);
CGPathAddLineToPoint(path, NULL, 40, self.frame.size.height);
CGPathAddLineToPoint(path, NULL, 40, self.frame.size.height - 40);
CGPathAddLineToPoint(path, NULL, 0, self.frame.size.height - 40);
CGPathCloseSubpath(path);
CGFloat lineSpacing = 5.0f;
CGFloat fontSize = 15.0f;
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = lineSpacing;
NSDictionary * dict = @{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:fontSize],
NSForegroundColorAttributeName:[UIColor redColor],
NSParagraphStyleAttributeName:paragraphStyle};
NSString * string = @"你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 蜜雪冰城甜蜜蜜 你爱我 我爱你 你爱我 我爱你 蜜雪冰城甜蜜蜜";
NSMutableAttributedString * attStr = [[NSMutableAttributedString alloc] initWithString:string
attributes:dict];
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attStr);
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, attStr.length), path, NULL);
CTFrameDraw(frame, context);
CFRelease(frame);
CFRelease(path);
CFRelease(frameSetter);
}
@end
效果如下: