You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
5.8 KiB
168 lines
5.8 KiB
// |
|
// NSMutableAttributedString+TY.m |
|
// TYAttributedLabelDemo |
|
// |
|
// Created by tanyang on 15/4/8. |
|
// Copyright (c) 2015年 tanyang. All rights reserved. |
|
// |
|
|
|
#import "NSMutableAttributedString+TY.h" |
|
|
|
@implementation NSMutableAttributedString (TY) |
|
|
|
#pragma mark - 文本颜色属性 |
|
- (void)addAttributeTextColor:(UIColor*)color |
|
{ |
|
[self addAttributeTextColor:color range:NSMakeRange(0, [self length])]; |
|
} |
|
|
|
- (void)addAttributeTextColor:(UIColor*)color range:(NSRange)range |
|
{ |
|
if (color.CGColor) |
|
{ |
|
[self removeAttribute:(NSString *)kCTForegroundColorAttributeName range:range]; |
|
|
|
[self addAttribute:(NSString *)kCTForegroundColorAttributeName |
|
value:(id)color.CGColor |
|
range:range]; |
|
} |
|
|
|
} |
|
|
|
#pragma mark - 文本字体属性 |
|
- (void)addAttributeFont:(UIFont *)font |
|
{ |
|
[self addAttributeFont:font range:NSMakeRange(0, [self length])]; |
|
} |
|
|
|
- (void)addAttributeFont:(UIFont *)font range:(NSRange)range |
|
{ |
|
if (font) |
|
{ |
|
[self removeAttribute:(NSString*)kCTFontAttributeName range:range]; |
|
|
|
CTFontRef fontRef = CTFontCreateWithName((CFStringRef)@"SFUI-Regular", font.pointSize, nil); |
|
if (nil != fontRef) |
|
{ |
|
[self addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)fontRef range:range]; |
|
CFRelease(fontRef); |
|
} |
|
} |
|
} |
|
|
|
#pragma mark - 文本字符间隔属性 |
|
- (void)addAttributeCharacterSpacing:(unichar)characterSpacing |
|
{ |
|
[self addAttributeCharacterSpacing:characterSpacing range:NSMakeRange(0, self.length)]; |
|
} |
|
|
|
- (void)addAttributeCharacterSpacing:(unichar)characterSpacing range:(NSRange)range |
|
{ |
|
[self removeAttribute:(id)kCTKernAttributeName range:range]; |
|
|
|
CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt16Type,&characterSpacing); |
|
[self addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:range]; |
|
CFRelease(num); |
|
} |
|
|
|
#pragma mark - 文本下划线属性 |
|
- (void)addAttributeUnderlineStyle:(CTUnderlineStyle)style |
|
modifier:(CTUnderlineStyleModifiers)modifier |
|
{ |
|
[self addAttributeUnderlineStyle:style |
|
modifier:modifier |
|
range:NSMakeRange(0, self.length)]; |
|
} |
|
|
|
- (void)addAttributeUnderlineStyle:(CTUnderlineStyle)style |
|
modifier:(CTUnderlineStyleModifiers)modifier |
|
range:(NSRange)range |
|
{ |
|
[self removeAttribute:(NSString *)kCTUnderlineColorAttributeName range:range]; |
|
|
|
if (style != kCTUnderlineStyleNone) { |
|
[self addAttribute:(NSString *)kCTUnderlineStyleAttributeName |
|
value:[NSNumber numberWithInt:(style|modifier)] |
|
range:range]; |
|
} |
|
|
|
} |
|
|
|
#pragma mark - 文本空心字及颜色 |
|
|
|
- (void)addAttributeStrokeWidth:(unichar)strokeWidth |
|
strokeColor:(UIColor *)strokeColor |
|
{ |
|
[self addAttributeStrokeWidth:strokeWidth strokeColor:strokeColor range:NSMakeRange(0, self.length)]; |
|
} |
|
|
|
- (void)addAttributeStrokeWidth:(unichar)strokeWidth |
|
strokeColor:(UIColor *)strokeColor |
|
range:(NSRange)range |
|
{ |
|
[self removeAttribute:(id)kCTStrokeWidthAttributeName range:range]; |
|
if (strokeWidth > 0) { |
|
CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt16Type,&strokeWidth); |
|
|
|
[self addAttribute:(id)kCTStrokeWidthAttributeName value:(__bridge id)num range:range]; |
|
|
|
CFRelease(num); |
|
} |
|
|
|
[self removeAttribute:(id)kCTStrokeColorAttributeName range:range]; |
|
if (strokeColor) { |
|
[self addAttribute:(id)kCTStrokeColorAttributeName value:(id)strokeColor.CGColor range:range]; |
|
} |
|
|
|
} |
|
|
|
#pragma mark - 文本段落样式属性 |
|
- (void)addAttributeAlignmentStyle:(CTTextAlignment)textAlignment |
|
lineSpaceStyle:(CGFloat)linesSpacing |
|
paragraphSpaceStyle:(CGFloat)paragraphSpacing |
|
lineBreakStyle:(CTLineBreakMode)lineBreakMode |
|
{ |
|
[self addAttributeAlignmentStyle:textAlignment lineSpaceStyle:linesSpacing paragraphSpaceStyle:paragraphSpacing lineBreakStyle:lineBreakMode range:NSMakeRange(0, self.length)]; |
|
} |
|
|
|
- (void)addAttributeAlignmentStyle:(CTTextAlignment)textAlignment |
|
lineSpaceStyle:(CGFloat)linesSpacing |
|
paragraphSpaceStyle:(CGFloat)paragraphSpacing |
|
lineBreakStyle:(CTLineBreakMode)lineBreakMode |
|
range:(NSRange)range |
|
{ |
|
[self removeAttribute:(id)kCTParagraphStyleAttributeName range:range]; |
|
|
|
// 创建文本对齐方式 |
|
CTParagraphStyleSetting alignmentStyle; |
|
alignmentStyle.spec = kCTParagraphStyleSpecifierAlignment;//指定为对齐属性 |
|
alignmentStyle.valueSize = sizeof(textAlignment); |
|
alignmentStyle.value = &textAlignment; |
|
|
|
// 创建文本行间距 |
|
CTParagraphStyleSetting lineSpaceStyle; |
|
lineSpaceStyle.spec = kCTParagraphStyleSpecifierLineSpacingAdjustment; |
|
lineSpaceStyle.valueSize = sizeof(linesSpacing); |
|
lineSpaceStyle.value = &linesSpacing; |
|
|
|
//段落间距 |
|
CTParagraphStyleSetting paragraphSpaceStyle; |
|
paragraphSpaceStyle.spec = kCTParagraphStyleSpecifierParagraphSpacing; |
|
paragraphSpaceStyle.value = ¶graphSpacing; |
|
paragraphSpaceStyle.valueSize = sizeof(paragraphSpacing); |
|
|
|
//换行模式 |
|
CTParagraphStyleSetting lineBreakStyle; |
|
lineBreakStyle.spec = kCTParagraphStyleSpecifierLineBreakMode; |
|
lineBreakStyle.value = &lineBreakMode; |
|
lineBreakStyle.valueSize = sizeof(lineBreakMode); |
|
|
|
// 创建样式数组 |
|
CTParagraphStyleSetting settings[] = {alignmentStyle ,lineSpaceStyle, paragraphSpaceStyle, lineBreakStyle}; |
|
CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, sizeof(settings) / sizeof(settings[0])); // 设置样式 |
|
|
|
// 设置段落属性 |
|
[self addAttribute:(id)kCTParagraphStyleAttributeName value:(id)CFBridgingRelease(paragraphStyle) range:range]; |
|
} |
|
|
|
@end
|
|
|