美文网首页
iOS 不规则排版UILabel示例

iOS 不规则排版UILabel示例

作者: 楠楠小胖纸 | 来源:发表于2021-10-16 09:30 被阅读0次

继承自UILabelYQLabel.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

效果如下:


相关文章

网友评论

      本文标题:iOS 不规则排版UILabel示例

      本文链接:https://www.haomeiwen.com/subject/zkavoltx.html