を試してみる、あなたのコードは大丈夫です。ところで、今、一般的に、あなたがblocksを使用してアニメーション化することをお勧めします:
[UIView animateWithDuration:3.0
animations:^{
self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100.0);
}];
それとも、あなたはオプションより少しより多くの制御などをしたい場合は、あなたが使用することができます。
[UIView animateWithDuration:3.0
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100);
}
completion:nil];
しかし、あなたのコード自動レイアウトを使用していない場合にはうまくいくはずです。 iOS 4以降では、上記の構文が優先されます。
あなたが自動レイアウトを使用している場合は、(a)は(下記参照)お使いの垂直方向のスペースの制約のためIBOutlet
を作成し、(b)は、あなたが何かを行うことができます:IBOutlet
を追加するには
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
static BOOL logoAlreadyMoved = NO; // or have an instance variable
if (!logoAlreadyMoved)
{
logoAlreadyMoved = YES; // set this first, in case this method is called again
self.imageVerticalSpaceConstraint.constant -= 100.0;
[UIView animateWithDuration:3.0 animations:^{
[self.view layoutIfNeeded];
}];
}
}
を制約のアシスタントエディタであなたの.hへの制約から、ちょうど制御押しながらドラッグ:
ところで、あなたは制約をアニメーション化している場合、Bあなたがその画像ビューにリンクしている他の制約に敏感です。イメージのすぐ下に何かを置くと、イメージに制約が設定されることがありますので、イメージに制約のある他のコントロールがないようにする必要があります(移動しない限り) 。
あなたが自動レイアウト使用している場合は、ストーリーボードまたはNIBを開いた後、「ファイルインスペクタ」(一番右のパネルの最初のタブを選択することによって言うことができるか、オプション + を押すことによって、それをプルアップすることができますコマンド + (番号 "1")):
はあなたが前のiOS 6をサポートすることを計画している場合、 "自動レイアウト" をオフにしてください、覚えておいてください。 AutolayoutはiOS 6の機能で、以前のバージョンのiOSでは動作しません。
出典
2013-01-07 04:47:49
Rob
viewDidLoadメソッドの場合。それについて申し訳ありません! –
オートレイアウトを使用していますか? – Rob
ロブと同意して、あなたの例で与えられたコードから、これはあなたのアニメーションの途中で自動レイアウトを取得する際の問題と思われます。自動レイアウトを使用している場合、フレームを明示的に設定するのではなく、制約をアニメートする必要があります。 –