C4Label切断了显示的文字

时间:2013-10-08 17:07:44

标签: ios objective-c c4

我正在开发一个相当简单的应用程序,它应该从一个数组中随机显示两个单词。现在它正在工作,除了...... 为什么有些文字缩短了? 我猜测无论字符串“配方”开头的字符数是多少,即使动态更改它也可以容纳的字符数。因此,例如,当它以“Raw Taco”开头时,它将缩短较长的短语,例如“Boiled Hotdog”短片。对此最好的解决方法是什么?

这是我正在使用的代码(抱歉,它没有完全缩短到基本位):

@implementation C4WorkSpace

{
    C4Shape * red; //, *green, *blue;
    NSArray * foodz, *cookz;
    C4Label * displaytask;
    C4Sample *sample;
    NSString *recipe, *startRecipe;
    int COOKZtaskpicked;
    int FOODZtaskpicked;
}

-(void)setup{

    startRecipe = [NSString stringWithFormat:@"I want to make this really long to start with"];

    C4Font *font = [C4Font fontWithName:@"Avenir" size:40.0f];
    C4Label *label = [C4Label labelWithText:@"Order Up!" font:font];
    label.center = CGPointMake(self.canvas.center.x, self.canvas.height / 3.0f);

    [self.canvas addLabel:label];

    //[self setupShapes];
    //    [self setupLabels];
    red.fillColor = [UIColor colorWithRed:0.9f green:0.0f blue:0.0f alpha:0.7f];

    sample = [C4Sample sampleNamed:@"C4Loop.aif"];
    [sample prepareToPlay];


    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \\
    // FOOD

    foodz =  @[ @"Sushi", @"Burger", @"Salad", @"Taco", @"Nachos", @"Hotdog" ];
    cookz =  @[ @"Baked", @"Boiled", @"Fried", @"Raw", @"Burnt", @"Rotten" ];
    [self changeFOODZtask]; // calls the function down below
    displaytask = [C4Label labelWithText:recipe];
    [displaytask addGesture:TAP name:@"tap" action:@"tapped:"];
    //[displaytask gestureForName:@"tap"]; // set double tap
    [self listenFor:@"tapped:" fromObject:displaytask andRunMethod:@"changeFOODZtask"];

    displaytask.center = self.canvas.center;
    //
    [self.canvas addSubview:displaytask];


    //displaytask = [C4Label labelWithText:cookz[0]];
    //[self changeCOOKZtask]; // calls the function down below
    //[displaytask addGesture:TAP name:@"tap" action:@"tapped:"];
    //[displaytask gestureForName:@"tap"]; // set double tap
    //[self listenFor:@"tapped:" fromObject:displaytask andRunMethod:@"changeCOOKZtask"];

    //displaytask.center = self.canvas.center;
    //
    //[self.canvas addSubview:displaytask];


}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \\
// Random FOODZ Picker
-(void) changeFOODZtask
{
    C4Log(@"changing task");
    FOODZtaskpicked = [C4Math randomIntBetweenA:0 andB: [foodz count] ];
    COOKZtaskpicked = [C4Math randomIntBetweenA:0 andB: [cookz count] ];

    recipe = [NSString stringWithFormat:@"%@ %@", cookz[COOKZtaskpicked],foodz[FOODZtaskpicked]];
    displaytask.text = recipe;
    C4Log(@"%@", recipe);

    [sample play];

    //    displaytask.text = foodz[FOODZtaskpicked];
    //    [displaytask sizeToFit];
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \\





@end

2 个答案:

答案 0 :(得分:1)

您的代码中有答案,但已被注释掉。

[displaytask sizeToFit];

问题不在于字符串。您可以看到,当您记录它们时,它们完好无损。

问题是显示它们的C4Label以基于起始文本的框架开始。因此,当您从短文本开始时,显示器的大小仅与“Raw Taco”一样长,但当“Rotten Sushi”出现时,它没有足够的空间来显示。当你调用sizeToFit时会发生什么事情,它将检查你需要在text中保存当前字符串所需的帧的大小,并适当地更改C4Label的帧。您可以阅读更多相关信息here

答案 1 :(得分:1)

如果我理解正确,C4Label是UILabel的子类?我的猜测是字符串被缩短了,因为框架中没有足够的空间来标记必须呈现整个字符串。所以,你有两个选择:

  1. 更改框架的大小或
  2. 缩小字体
  3. 如果要执行1,建议您使用XIB文件创建布局并适当设置大小限制。对于2,在标签

    上将属性adjustsFontSizeToFitWidth设置为YES