字符串的计算

UIKit  在 NSAttributedString 中加入了新的方法,以支持格式化文本的绘制、计算文本在绘制前的大小及空间。这些方法不影响文本的内容,只影响绘制的过程。

默认,文本绘制使用本地坐标,内容从某个点向右向下绘制。当你放置文本内容时,记住文本块的左上角就是绘制的起点。

绘制文本

  • – drawAtPoint:
  • – drawInRect:
  • – drawWithRect:options:context:

实例方法: 1??  boundingRectWithSize:options:context:返回文本绘制所占据的矩形空间。

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context

参数1: size:宽高限制,用于计算文本绘制时占据的矩形块。(The width and height constraints to apply when computing the string’s bounding rectangle.)

参数2:options:文本绘制时的附加选项。可能取值请参考“NSStringDrawingOptions”

参数3:context:上下文。包括一些信息,例如如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可设为 nil 。

返回值:一个矩形,大小等于文本绘制完将占据的宽和高。

可以使用该方法计算文本绘制所需的空间。size 参数是一个constraint ,用于在绘制文本时作为参考。但是,如果绘制完整个文本需要更大的空间,则返回的矩形大小可能比 size 更大。一般,绘制时会采用constraint 提供的宽度,但高度则会根据需要而定。

特殊情况:

为了计算文本块的大小,该方法采用默认基线。

如果 NSStringDrawingUsesLineFragmentOrigin未指定,矩形的高度将被忽略,同时使用单线绘制。(由于一个 bug,在 iOS6 中,宽度会被忽略)

iOS 6.0 以后支持。

声明于 :NSStringDrawing.h

2?? drawAtPoint: 从指定点(当前图形上下文)开始绘制文本。

- (void)drawAtPoint:(CGPoint)point

参数:point:当前图形上下文中的点,文本将从此开始绘制。该图形上下文的坐标系通常由当前正在绘制的视图定义。

该方法从某个点开始绘制整个文本。该方法根据 attributedstring 的属性来绘制行。如果文本中出现换行符,将进行换行,后续的文本将被放到下一行的最初位置。

iOS 6.0 以后支持.

声明于NSStringDrawing.h

3?? drawInRect:在当前图形上下文的指定矩形内绘制文本。

- (void)drawInRect:(CGRect)rect

参数: rect:指定绘制文本的矩形范围。

该方法在指定矩形内绘制尽可能多的文本内容,必要时会压缩字符。如果对于该矩形来说,文本内容太长,该方法绘制尽可能多的内容,剩余内容将被剪切。该方法用 attributed string 的属性来绘制行。如果文本中出现换行符,将进行换行,后续的文本将被放到下一行的最初位置。

Available in iOS 6.0 and later.

Declared In

NSStringDrawing.h

4??drawWithRect:options:context: 用提供的选项将文本绘制到指定的矩形分为内。

- (void)drawWithRect:(CGRect)rect options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context

参数

rect

指定在某个矩形中绘制文本。

options

文本绘制选项。可能取值请参考“NSStringDrawingOptions”

context

上下文对象,用于包含信息:如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil。

该方法在指定矩形内绘制尽可能多的文本内容,必要时会对字符进行压缩。如果矩形内要绘制的文本内容太长,该方法将根据需要缩放字体,或者调整字符间距。

该方法用 attributed string 的属性来绘制行。如果文本中出现换行符,将进行换行,后续的文本将被放到下一行的最初位置。

特殊情况 :该方法采用默认基线。

如果NSStringDrawingUsesLineFragmentOrigin 未指定,矩形的高度将被忽略,同时使用单线绘制。(由于一个 bug,在 iOS6 中,宽度会被忽略)

iOS 6.0 以后支持.

声明于

NSStringDrawing.h

???size

返回文本绘制所需 size。

Returns the size required to draw the string.

- (CGSize)size

返回值

绘制完整文本所需的最小 size。

可以用该方法在绘制之前计算需要多大空间。

iOS 6.0 以后支持.

声明于

NSStringDrawing.h

常量

6??NSStringDrawingOptions  文本绘制选项。

enum {

NSStringDrawingTruncatesLastVisibleLine= 1 << 5,

NSStringDrawingUsesLineFragmentOrigin= 1 << 0,

NSStringDrawingUsesFontLeading= 1 << 1,

NSStringDrawingUsesDeviceMetrics= 1 << 3,

};

typedef NSInteger NSStringDrawingOptions;

常量

NSStringDrawingTruncatesLastVisibleLine

如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果指定了NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。

NSStringDrawingUsesLineFragmentOrigin

绘制文本时使用 line fragment origin 而不是 baseline origin。

NSStringDrawingUsesFontLeading

计算行高时使用行间距。(译者注:字体大小+行间距=行高)

NSStringDrawingUsesDeviceMetrics

计算布局时使用图元字形(而不是印刷字体)。

划线样式属性

指定下划线或删除线样式。

enum {

NSUnderlineStyleNone = 0x00,

NSUnderlineStyleSingle= 0x01,

};

常量

NSUnderlineStyleNone

不划线。

NSUnderlineStyleSingle

单线

可以在属性字串的 NSUnderlineStyleAttributeNameNSStrikethroughStyleAttributeName属性上使用这些常量。

字符属性

字符属性可以应用于 attributed string 的文本中。

NSString *const NSFontAttributeName;

NSString *const NSParagraphStyleAttributeName;

NSString *const NSForegroundColorAttributeName;

NSString *const NSBackgroundColorAttributeName;

NSString *const NSLigatureAttributeName;

NSString *const NSKernAttributeName;

NSString *const NSStrikethroughStyleAttributeName;

NSString *const NSUnderlineStyleAttributeName;

NSString *const NSStrokeColorAttributeName;

NSString *const NSStrokeWidthAttributeName;

NSString *const NSShadowAttributeName;

NSString *const NSVerticalGlyphFormAttributeName;

常量

NSFontAttributeName

该属性所对应的值是一个 UIFont 对象。该属性用于改变一段文本的字体。如果不指定该属性,则默认为12-point Helvetica(Neue)。

NSParagraphStyleAttributeName

该属性所对应的值是一个 NSParagraphStyle 对象。该属性在一段文本上应用多个属性。如果不指定该属性,则默认为 NSParagraphStyle 的defaultParagraphStyle 方法返回的默认段落属性。

NSForegroundColorAttributeName

该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的字体颜色。如果不指定该属性,则默认为黑色。

NSBackgroundColorAttributeName

该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的背景颜色。如果不指定该属性,则默认无背景色。

NSLigatureAttributeName

该属性所对应的值是一个 NSNumber 对象(整数)。连体字符是指某些连在一起的字符,它们采用单个的图元符号。0 表示没有连体字符。1 表示使用默认的连体字符。2表示使用所有连体符号。默认值为 1(注意,iOS 不支持值为 2)。

NSKernAttributeName

该属性所对应的值是一个 NSNumber 对象(整数)。字母紧排指定了用于调整字距的像素点数。字母紧排的效果依赖于字体。值为 0 表示不使用字母紧排。默认值为0。

NSStrikethroughStyleAttributeName

该属性所对应的值是一个 NSNumber 对象(整数)。该值指定是否在文字上加上删除线,该值参考“Underline Style Attributes”。默认值是NSUnderlineStyleNone

NSUnderlineStyleAttributeName

该属性所对应的值是一个 NSNumber 对象(整数)。该值指定是否在文字上加上下划线,该值参考“Underline Style Attributes”。默认值是NSUnderlineStyleNone

NSStrokeColorAttributeName

该属性所对应的值是一个 UIColor 对象。如果该属性不指定(默认),则等同于 NSForegroundColorAttributeName。否则,指定为删除线或下划线颜色。更多细节见“Drawing attributedStrings that are both filled and stroked”。

NSStrokeWidthAttributeName

该属性所对应的值是一个 NSNumber 对象(小数)。该值改变描边宽度(相对于字体size 的百分比)。默认为 0,即不改变。正数只改变描边宽度。负数同时改变文字的描边和填充宽度。例如,对于常见的空心字,这个值通常为3.0。

NSShadowAttributeName

该属性所对应的值是一个 NSShadow 对象。默认为 nil。

NSVerticalGlyphFormAttributeName

该属性所对应的值是一个 NSNumber 对象(整数)。0 表示横排文本。1 表示竖排文本。在 iOS 中,总是使用横排文本,0 以外的值都未定义。

时间: 2024-10-06 19:08:56

字符串的计算的相关文章

js字符串长度计算(一个汉字==两个字符)和字符串截取

js字符串长度计算(一个汉字==两个字符)和字符串截取 String.prototype.realLength = function() { return this.replace(/[^\x00-\xff]/g, "**").length; // [^\x00-\xff] - 匹配非双字节的字符 }; String.prototype.realSubstring = function(n){ var str = this||''; if(this.realLength()<=n

php中的中文字符串长度计算以及截取

一.中文字符串截取:mb_substr() mb_substr($str, $start, $length, $encoding); $str,需要截断的字符串 $start,截断开始处,起始处为0 $length,要截取的字数 $encoding,网页编码,如utf-8,GB2312,GBK 例: $str = "这个字符串是我想要截取的"; 截取"这个字"; echo mb_substr($str,0,3,"utf-8"); 二.中文字符串长

iOS 根据字符串样式、字符串长度计算字符串所占大小

通过Category为NSString添加方法: 1. 根据字符串样式.字符串长度计算字符串所占大小 /** *  @param font     字符串样式 *  @param maxWidth 指定字符串长度 */- (CGSize)sizeWithFont:(UIFont *)font maxWidth:(CGFloat)maxWidth { // 获取文字样式 NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; a

objective-c中字符串长度计算

我们知道,在c语言中,使用sizeof ()计算在内存中占用的字节数, 引用string.h后,使用strlen()计算字符串的长度(不包含\0). 而在object-c中, "length"这个方法,可以返回字符串的长度. 比如:NSString * str [email protected]"12345";int a = 0; a = [str  lenght];此时a的值就是字符串str的长度,也就是5. 值得一提的是oc 中length方法在计算字符串长度时

C# 字符串函数计算

仅供参考: #region 字符串函数计算 /// <summary> /// 字符串函数运算 /// 格式1:@函数名(参数1,参数2...) /// 格式2:@函数名(参数1,参数2...)[email protected]函数名(参数1,参数2...)[email protected]函数名(参数1,参数2...).... /// </summary> /// <param name="str"></param> /// <r

PHP 实现字符串表达式计算

什么是字符串表达式?即,将我们常见的表达式文本写到了字符串中,如:"$age >= 20",$age 的值是动态的整型变量. 什么是字符串表达式计算?即,我们需要一段程序来执行动态的表达式,如给定一个含表达式的字符串变量并计算其结果,而表达式字符串是动态的,比如为客户A执行的表达式是 $orderCount >= 10,而为客户B执行的表达式是 $orderTotal >= 1000. 场景在哪儿?同一份程序具有完全通用性,但差异就其中一个表达式而已,那么我们需要将其

iOS 根据字符串长度计算label的尺寸

//计算字符串高度- (CGSize)labelAutoCalculateRectWith:(NSString*)text FontSize:(CGFloat)fontSize MaxSize:(CGSize)maxSize {        NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc]init];        paragraphStyle.lineBreakMode=NSLineBreak

c语言判断是否是utf8字符串,计算字符个数

#include <stdio.h> #include <string.h> #include <stdlib.h> /**************************************************************************** Unicode符号范围 | UTF-8编码方式 (十六进制) | (二进制) 0000 0000-0000 007F:0xxxxxxx 0000 0080-0000 07FF:110xxxxx 10x

九度 1101 - 字符串处理 - 计算表达式

根据我的通过来看,首先这道题里面没有小数,如果存在除不尽的情况,也是按取整来算. 本题建立了两个栈,一个存储数字的数字栈,一个存储加减乘除的符号栈.在处理字符串的时候,每次找到一个数字时,放进一个string的临时变量里,因为会存在十位以上的情况:每次找到一个符号时,首先将string变量转int放入数字栈,然后检查符号栈的栈顶符号是否为乘或者除,如果是就从符号栈弹出顶,从数字栈弹出两个数,计算后放回数字栈.这样到处理完字符串时,我们的符号栈内只剩下加和减了.此时不断弹出符号与数字进行计算,直至

字符串长度计算、截取、url参数获取

1.中英混合文字字符截取 //中文长度截取计算,可取中英混合,个数向上取整,精确度1个英文字符误差,一个英文算一个字符,一个汉字算一个字符. //sub("中文zlsd",1) -> "中" //sub("中文zlsd",3) -> "中文" function subCh (str,n){ var r=/[^\x00-\xff]/g; if(str.replace(r,"mm").length&