1

我有一个模仿按钮的类。它包含一个标签,我试图将其居中对齐(水平)。无论我尝试什么,标签都停留在左侧,让我认为这比看起来更复杂。这是唯一的初始化/设置代码:

-(CCButtonLayer*)initWithText:(NSString*)text bgColor:(ccColor4B)color width:(GLfloat)width height:(GLfloat)height {
    self = [super initWithColor:color width:width height:height];
    self.lbl = [CCLabelTTF labelWithString:text fontName:@"Marker Felt" fontSize:22];
    self.lbl.horizontalAlignment = kCCTextAlignmentCenter;
    [self.lbl setHorizontalAlignment:kCCTextAlignmentCenter];
    self.lbl.color = ccc3(0,0,0);
 //   self.lbl.contentSize = CGSizeMake(width, height); // no effect anyway
    self.lbl.anchorPoint = CGPointZero;
    self.lbl.position = CGPointZero;
    [self addChild:self.lbl];
    return self;
}
4

3 回答 3

3

我删除了标签的对齐属性并手动对齐它。很明显,我看不到的事情正在发生,也许正如你所说的@LearnCocos2D还有另一个偏移量

// this worked
CGSize textSize = [self.lbl.string sizeWithFont:[UIFont fontWithName:fontName size:fontSize]];
self.lbl.anchorPoint = CGPointZero;
self.lbl.position = ccp(textSize.width /2.0f, textSize.height/2.0);
于 2012-08-19T14:39:25.650 回答
1
self.lbl.anchorPoint = CGPointZero;
self.lbl.position = CGPointZero;

正是这两行决定了标签的位置。

尝试将它们设置为:

self.lbl.anchorPoint = ccp(0.5, 0.5);  //This is default, you could omit
self.lbl.position = ccp(self.contentSize.width / 2.0f, self.contentSize.height / 2.0f);

我假设“self”是按钮,此时它的内容大小已设置

于 2012-08-18T17:43:16.890 回答
1

正如詹姆斯所说,改变锚点会影响对齐。所以不要分配 CGPointZero 因为这会使左下角与父位置对齐。

您仍然没有看到任何变化的事实可能表明您没有考虑标签的位置实际上是对父位置的偏移。现在,如果您也更改了父级的锚点,则标签的位置将是父级左下角的偏移量。

长话短说:保持锚点不变。除了标签,您可以使用anchorPoint 来影响对齐。

于 2012-08-18T18:49:46.837 回答