iOS 不规则排版UILabel示例

继承自UILabelYQLabel.m文件

#import "QYLabel.h"
#import 


@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示例)