3

何らかの理由で、UILabelのテキストはアニメーションなしで配置を設定したいので、テキストをラベルの残りの部分と一緒にアニメーション化する方法がわかりません。

私は今次のコードを持っています:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(40,200,100,50)];
[label setText:@"Label Name"];
[label setBackgroundColor:[UIColor blueColor]];
[label setFont:[UIFont systemFontOfSize:17.0]];
[label setTextColor:[UIColor blackColor]];
[label setTextAlignment:NSTextAlignmentCenter];
[self.view addSubview:label];
[UIView animateWithDuration:3 animations:^{
    [label setFrame:CGRectMake(40,200,200,300)];
}];

このコードは、ボタンのアクションメソッドで呼び出されます。通常、アニメーションはラベルの作成とは別に行われますが、同じ方法でテストします。

何らかの理由でこれを実行すると、ラベルが想定どおりに完全にサイズ変更され、フレームのサイズ変更を確認できます。ただし、テキストは横軸でアニメーションの最後の位置に揃えられます。ただし、縦軸では適切にアニメーション化されます。

現在、アニメーションは次のようになっています。

animate1 animate2 animate3

何らかの理由で、ラベルのテキストは上下に移動しても中央に配置されたままになりますが、私が想定しているように、左右の中央に配置されたままにはなりません。

私は全体を見渡して、これに対する解決策を見つけることができませんでした。UILabelsがこのように動作すること、およびそれを回避する方法があるかどうかを誰かが知っていますか?

4

1 に答える 1

1

UIView を追加してから、そのサブビューとして UILabel を追加できます。

 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(40, 20, 100, 50)];
[view setBackgroundColor:[UIColor blueColor]];
[self.view addSubview:view];

UILabel *label = [[UILabel alloc] init];
[label setText:@"Label Name"];
[label setBackgroundColor:[UIColor clearColor]];
[label setFont:[UIFont systemFontOfSize:17.0]];
[label setTextColor:[UIColor blackColor]];
[label setTextAlignment:NSTextAlignmentCenter];
[label sizeToFit];
[label setNumberOfLines:0];
[label setFrame:CGRectOffset(label.frame, (view.frame.size.width - label.frame.size.width)/2, (view.frame.size.height - label.frame.size.height)/2)];
[view addSubview:label];

 [UIView animateWithDuration:3 animations:^{
 [view setFrame:CGRectMake(40, 20, 200, 300)];
 [label setFrame:CGRectMake((view.frame.size.width - label.frame.size.width)/2, (view.frame.size.height - label.frame.size.height)/2, label.frame.size.width, label.frame.size.height)];
 } completion:^(BOOL finish){

 }];
于 2013-03-26T14:05:40.503 に答える