`
浮生长恨
  • 浏览: 212735 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

修改CCLabelTTF行间距的办法

阅读更多

因为策划需要修改文字面板上的行间距,看了一阵CCLabelTTF想不出怎么改,于是上网各种找,终于在stackoverflow上找到了前辈们的解决办法。特摘录如下:
问:
Is there anyway in ios app to adjust the linespacing between the multiple lines in CCLabelTTF in cocos2d?

答:
"homemade" solution

#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface CCLabelTTFLineSpaced : CCLayer {
}

+ (id) labelWithString:(NSString*)string dimensions:(CGSize)dimensions hAlignment:  (CCTextAlignment)alignment fontName:(NSString*)name fontSize:(CGFloat)size lineSpace:(CGFloat)space;

- (id) initWithString:(NSString*)str dimensions:(CGSize)dimensions hAlignment:(CCTextAlignment)alignment fontName:(NSString*)name fontSize:(CGFloat)size lineSpace:(CGFloat)space;

@end


@implementation CCLabelTTF(Extension)
+ (id)labelWithString:(NSString *)string dimensions:(CGSize)dimensions hAlignment:(CCTextAlignment)alignment fontName:(NSString *)name fontSize:(CGFloat)size lineSpace:(CGFloat)space{
    return [[[self alloc] initWithString:string dimensions:dimensions hAlignment:alignment fontName:name fontSize:size lineSpace:space] autorelease];
}

- (id)initWithString:(NSString *)string dimensions:(CGSize)dimensions hAlignment:(CCTextAlignment)alignment fontName:(NSString *)name fontSize:(CGFloat)size lineSpace:(CGFloat)space
{
    if (self = [super init]) {
        anchorPoint_ = ccp(0.5f, 0.5f);
        [self setContentSize:dimensions];
        
        int pos = 0;
        int ii = 0;
        while (pos < [string length]) {
            int end = 0;
            int lastCut = -1;
            bool finished = NO;
            while (finished == NO) {
                CGSize actualSize = [[string substringWithRange:NSMakeRange(pos, end)] sizeWithFont:[UIFont fontWithName:name size:size]];
                if (actualSize.width > dimensions.width || pos+end == [string length]) {
                    if (pos+end == [string length] && actualSize.width <= dimensions.width) {
                        lastCut = end;
                    }
                    finished = YES;
                }else {
                    if ([[string substringWithRange:NSMakeRange(pos+end, 1)] isEqualToString:@" "] ||
                        [[string substringWithRange:NSMakeRange(pos+end, 1)] isEqualToString:@"."] ||
                        [[string substringWithRange:NSMakeRange(pos+end, 1)] isEqualToString:@""]) {
                        lastCut = end;
                    }
                    end++;
                }
            }
            
            NSString *strLine = [string substringWithRange:NSMakeRange(pos, lastCut)];
            CCLabelTTF *line = [CCLabelTTF labelWithString:strLine dimensions:CGSizeMake(dimensions.width, size*2) hAlignment:alignment fontName:name fontSize:size];
            [line setAnchorPoint:ccp(0, 0)];
            [line setPosition:ccp(0, -ii*(space+size))];
            
            [self addChild:line];
            
            pos = pos + lastCut;
            ii++;
        }
    }
    return self;
}

@end


原地址:http://stackoverflow.com/questions/7856833/line-spacing-in-cclabelttf
分享到:
评论

相关推荐

    C# RichTextbox设置行间距

    可以通过修改这些命令后面的控制信息来改变行间距。例如,增加行距可以修改 `\l'number'`,`number`代表行间距的单位。以下是一个例子: ```csharp string rtfText = rtb.Rtf; rtfText = rtfText.Replace(@"\par...

    richtextbox设置行间距

    总结一下,设置`RichTextBox`的行间距并不像直接使用一个内置的属性那么简单,而是需要通过修改字体的高度来实现。这个过程涉及到`System.Drawing.Font`类的使用,以及对`GraphicsUnit.Point`的理解。对于初学者来说...

    ckeditor 行间距插件

    4. **自定义配置**:除了预设的行间距值,开发者还可以根据项目需求,通过配置文件自定义行间距的选项,添加更多可用的行间距值,或者修改默认值。 5. **事件处理与交互**:插件可能还涉及监听用户的操作,例如当...

    QtextEdit 段 行间距设置源码

    你可以创建一个QTextBlockFormat对象,然后修改其属性,如`setLeading`,来设定行间距。以下是一个示例: ```cpp QTextBlockFormat blockFormat; blockFormat.setLeading(12); // 12像素的行间距 QTextCursor ...

    itext设置段落行间距.zip

    在这个“itext设置段落行间距.zip”压缩包中,包含了解决PDF生成过程中的一些关键问题,特别是针对中文支持和段落行距设置的方法。下面我们将详细探讨这些知识点。 首先,我们来看如何解决PDF导出中的中文问题。在...

    lable的行间距和字间距的设置

    在界面设计中,行间距和字间距的设置对于提升用户体验和视觉效果至关重要。本篇文章将详细探讨如何调整`UILabel`的行间距和字间距,并通过实例演示如何计算`UILabel`的总高度。 首先,我们需要理解`UILabel`的基本...

    C# ListView添加行距(ListView 添加行间距)源代码

    我要的是增大行间距。 二、解决方法: // // imageList1 // this.imageList1.ImageSize = new System.Drawing.Size(2, 30); this.imageList1.TransparentColor = System.Drawing.Color.Transparent; this....

    易语言设置超级列表框行间距模块源码

    本资源主要关注的是如何在易语言中设置超级列表框(Super ListBox)的行间距。下面将详细阐述易语言、超级列表框以及如何通过API函数来实现行间距的设置。 首先,我们要理解“超级列表框”是什么。在图形用户界面...

    ckeditor行间距插件

    4. **事件监听与处理**:插件可能还涉及到对用户操作的监听,例如当用户选择文本后点击行间距按钮,插件需要正确处理选区的样式更改。 5. **兼容性**:为了确保插件在不同浏览器和CKEditor版本中都能正常工作,...

    设置RichTextbox行间距.rar

    4. **修改RTF内容**:在每个`\par`命令后面插入你的行间距命令,然后将修改后的RTF字符串赋值回`RichTextBox`的`Rtf`属性。 5. **处理字号变化**:为了确保行间距不随字号变化,你可能需要监听`RichTextBox`的`...

    易语言设置超级列表框行间距模块

    易语言设置超级列表框行间距模块源码,设置超级列表框行间距模块,设置超级列表框行间距,取祖宗句柄,WndProc,句柄是否存在,取位置,SendMessage,SendMessageWINDOWPOS,SetWindowLong,CallWindowProc,GetWindowLong,...

    word2021中怎么调整行间距.docx

    ### Word2021中如何调整行间距 在Word2021中,调整行间距是一项常用的功能,它可以帮助用户优化文档布局,提高阅读体验。无论是为了使文档看起来更加整洁,还是为了节省空间,掌握如何调整行间距都是非常必要的。...

    可调节文本行间距的自定义控件

    本话题聚焦于一个专门针对文本布局优化的自定义控件,它允许用户自由调节文本的行间距以及实现首行缩进的功能。这样的控件在文本显示丰富的应用场景中,如电子阅读器、文档编辑器或富文本编辑框,具有很高的实用价值...

    适用于帝国后台的ckeditor的行间距行高lineheight插件

    而“行间距行高lineheight插件”则是针对CKEditor的一个自定义扩展,主要目的是为了提供更细致的文本排版控制,让用户能够调整文本的行间距和行高,以满足不同的设计和视觉需求。 帝国CMS是一个流行的开源网站内容...

    QtLabelLineSpacing.zip

    默认情况下,QLabel的行间距是固定的,但我们可以利用QLabel的`setStyleSheet`方法,通过CSS样式来调整行间距。例如,你可以添加以下代码: ```cpp QString styleSheet = "QLabel { line-height: 1.5; }"; // 设置...

    ckeditor设置行间距插件包

    ckeditor设置行间距资源包 1.下载ckeditor的行距插件包 lineheight 2.解压到ckeditor/plugins目录下 3.修改ckeditor目录下的 config.js文件

    论文研究-基于行间距编码的文本数字水印算法 .pdf

    基于行间距编码的文本数字水印算法研究涉及了数字水印技术在文本文件中的应用,即如何在不改变原文内容的前提下,通过调整文本中行间距的方式来嵌入、提取和隐藏信息,以保护电子文档的版权。以下详细解析了该论文...

    易语言源码易语言设置超级列表框行间距模块源码.rar

    易语言源码易语言设置超级列表框行间距模块源码.rar 易语言源码易语言设置超级列表框行间距模块源码.rar 易语言源码易语言设置超级列表框行间距模块源码.rar 易语言源码易语言设置超级列表框行间距模块源码.rar ...

    c++、vc++调整文本行间距

    `cf2.dwMask`字段可以指定要修改的属性,如`CFM_SIZE`用于字体大小,`cf2.yHeight`则表示字体高度,影响行间距。发送`EM_SETCHARFORMAT`消息给`EDIT`控件,传递`CHARFORMAT2`结构即可修改这些属性。 5. 注意事项:...

Global site tag (gtag.js) - Google Analytics