CCLabelTTF contentSize在iOS 6和iOS 7中有所不同 - cocos2d-x

时间:2014-03-20 15:40:21

标签: ios cocos2d-x

我在我的项目中使用Cocos2dx。我注意到CCLabelTTF绘制的文字比iOS 7高2-3个像素。 iOS 6中的行间距也大于iOS 7中的行间距。 我在2个不同的设备上进行了测试。代码很简单:

CCLabelTTF *fLabel = CCLabelTTF::create(title, "Helvetica Bold", 14);
fLabel->setPosition(centerPoint);
node->addChild(fLabel);

有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

回答我自己的问题。我找到了解决方案。我现在正在使用cocos2dx 2.2并且CCImage.mm中存在错误。 Cocos2dx使用不推荐的方法来获取字符串大小。这就是为什么iOS 6中的字符串大小与iOS 7中的字符串大小不同的原因。 我在_calculateStringSize文件中编辑了CCImage.mm方法,这是我的代码:

static CGSize _calculateStringSize(NSString *str, id font, CGSize *constrainSize)
{
    NSArray *listItems = [str componentsSeparatedByString: @"\n"];
    CGSize dim = CGSizeZero;
    CGSize textRect = CGSizeZero;
    textRect.width = constrainSize->width > 0 ? constrainSize->width
                                          : 0x7fffffff;
    textRect.height = constrainSize->height > 0 ? constrainSize->height
                                          : 0x7fffffff;

      CGSize tmp;
    if([str respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){
        NSDictionary *attributes = @{
                NSFontAttributeName: font
        };
        tmp = [str boundingRectWithSize:textRect options:(NSStringDrawingOptions)(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil].size;
        [paragraphStyle release];
    }else{
        tmp = [str sizeWithFont:font constrainedToSize:textRect];
    }

    if (tmp.width > dim.width)
    {
       dim.width = tmp.width; 
    }

    dim.height += tmp.height;


   return dim;
}

我建议您使用此方法计算项目中的字符串大小。 希望它对某人有帮助。

答案 1 :(得分:0)

multiply the scale value to font size.

try this 

CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
float frameSize = pEGLView->getFrameSize();
float scaleFactor = frameSize.width / designResolutionSize.width ;
CCLabelTTF *fLabel = CCLabelTTF::create(title, "Helvetica Bold", 14*scaleFactor);

答案 2 :(得分:0)

Timur Mustafaev的实施存在一些小问题。这个应该正常工作:

static CGSize _calculateStringSize(NSString *str, id font, CGSize *constrainSize)
{
    NSArray *listItems = [str componentsSeparatedByString: @"\n"];
    CGSize dim = CGSizeZero;
    CGSize textRect = CGSizeZero;
    textRect.width = constrainSize->width > 0 ? constrainSize->width
                                              : 0x7fffffff;
    textRect.height = constrainSize->height > 0 ? constrainSize->height
                                              : 0x7fffffff;


    for (NSString *s in listItems)
    {
        CGSize tmp;

        // Method only exists on iOS6+.
        if([s respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){
            NSDictionary *attributes = @{NSFontAttributeName: font};
            tmp = [s boundingRectWithSize:textRect options:(NSStringDrawingOptions)(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil].size;
        } else {
            tmp = [s sizeWithFont:font constrainedToSize:textRect];
        }

        if (tmp.width > dim.width)
        {
           dim.width = tmp.width; 
        }

        dim.height += tmp.height;
    }

    dim.width = ceilf(dim.width);
    dim.height = ceilf(dim.height);

    return dim;
}