2

問題は次のとおりです。

ある瞬間、ボタンの位置が変わります。これに続いて、ボタンのタイトルも変更する必要があります。

アニメーション(UIViewアニメーションブロック)で位置を変更し、タイトルを設定するとフレームが元の値(アニメーション前)に戻ります。

それで...どうすれば修正できますか?そして、なぜそれが起こるのですか?

コードで更新

CGRect buttonFrame = self.button.frame;
buttonFrame.origin = CGPointMake(16, 80);
[UIView animateWithDuration:.4 animations:^{
    [self.button setFrame:buttonFrame];
}completion:^(BOOL finished){
    [self.button setTitle:@"Title" forState:UIControlStateNormal]; // can be here...
}];

setTitle:ForState: メソッドをどこに配置しても、フレームは元の値に戻ります。

4

3 に答える 3

5

自動レイアウトを使用する場合は、フレームを設定しないでください。代わりに、ボタンの位置を変更したい場合は、IBOutlets を IB の制約に作成し、それらの定数を変更する必要があります。たとえば、ボタンに画面の上部と左側に制約がある場合 (ここでは leftCon と topCon と呼びます)、次のようにすることができます。

[UIView animateWithDuration:.4 animations:^{
    self.leftCon.constant = 16;
    self.topCon.constant = 80;
    [self.view layoutIfNeeded];
}];
于 2013-08-01T15:09:14.487 に答える
5

UIViewController で Autolayout を無効にしてみてください。私の場合、Autolayout が厄介なレイアウト動作を引き起こすことがあります。特にアニメーションを使用している場合。

編集

自動レイアウトがオンの場合、これは私にとってはうまくいきました:

[UIView animateWithDuration:.4 animations:^{
     self.button.transform = CGAffineTransformMakeTranslation(-200,-200);
}completion:^(BOOL finished) {
    [self.button setTitle:@"YourTitle" forState:UIControlStateNormal];
}];  
于 2013-08-01T14:52:09.587 に答える
3

transformフレームを変更する代わりに使用してみてください:

button.transform = CGAffineTransformMakeTranslation(-100,-100);

于 2013-08-01T14:54:17.877 に答える