iPhone自带的控件中文字是无法实现竖排的,但开发过程中却会遇到竖排的要求,现在就写一下我在iPhone开发中实现文字竖排的方法,
首先新建一个类继承于UIView命名为:MyCanvas,然后把(void)drawRect:(CGRect)rect方法的注释打开并重写其方法。
- (void)drawRect:(CGRect)rect
{
[[UIColor colorWithRed:101.0/255 green:61.0/255 blue:0 alpha:1.0]set];//设置文字颜色
int iCols = 0;//文字显示的列数
int iRows = 0;//文字显示的行数
int iSpace = 0;//文字的空格数
NSString *sTitle = item.sTitle;
int titleLen = [sTitle Length];
for(int i = 0; i < titleLen; i++)
{
int iPosX = MARGIN_LEFT - iCols * FONT_LINE_HEIGHT
;//iPosX是屏幕上x轴的坐标、FONT_LINE_HEIGHT是行高
int iPosY = MARGIN_TOP + iRows * FONT_LINE_WIDTH + iSpace * FONT_LINE_SPACE;//iPosY是屏幕上y轴的坐标、FONT_LINE_WIDTH是行宽、FONT_LINE_SPACE是空格大小
CGPoint point = CGPointMake(iPosX, iPosY);
NSString *sTemp = [sTitle substringWithRange:NSMakeRange(i, 1)];
if([sTemp isEqualToString:TAG_TAB])//判断是否有空格
{
iSpace ++;
}
else if([sTemp isEqualToString:TAG_NEW_LINE])//判断是否换行
{
iRows = 0;
iCols ++;
}
else{
[sTemp drawAtPoint:point withFont:[UIFont fontWithName:@"AmericanTypewriter-Bold" size:12.0]];//将文字画在画布上指定的位置
iRows ++;
}
}
…
…
}
省略号部分是实现其它文字竖排的代码,与实现Title竖排是一样的,就不一一列举了。
然后在需要实现文字竖排的地方调用MyCanvas类即可,如:
MyCanvas *canvas = [[MyCanvas alloc]initWithFrame:CGRectMake(0, 0, 252, 340) InfoItem:item];
[self.view addSubview:canvas];
[canvas release];
其实如上方法就是定义一个画布,然后把文字一一画在在指定的位置,如此,不管是要求文字竖排还是斜排或是倒排,便都可以实现了