我正在开发一个相当简单的应用程序,它应该从一个数组中随机显示两个单词。现在它正在工作,除了...... 为什么有些文字缩短了? 我猜测无论字符串“配方”开头的字符数是多少,即使动态更改它也可以容纳的字符数。因此,例如,当它以“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
答案 0 :(得分:1)
您的代码中有答案,但已被注释掉。
[displaytask sizeToFit];
问题不在于字符串。您可以看到,当您记录它们时,它们完好无损。
问题是显示它们的C4Label
以基于起始文本的框架开始。因此,当您从短文本开始时,显示器的大小仅与“Raw Taco”一样长,但当“Rotten Sushi”出现时,它没有足够的空间来显示。当你调用sizeToFit
时会发生什么事情,它将检查你需要在text
中保存当前字符串所需的帧的大小,并适当地更改C4Label
的帧。您可以阅读更多相关信息here。
答案 1 :(得分:1)
如果我理解正确,C4Label是UILabel的子类?我的猜测是字符串被缩短了,因为框架中没有足够的空间来标记必须呈现整个字符串。所以,你有两个选择:
如果要执行1,建议您使用XIB文件创建布局并适当设置大小限制。对于2,在标签
上将属性adjustsFontSizeToFitWidth设置为YES