自動レイアウト以外のストーリーボード/NIBの場合、コードは問題ありません。ちなみに、ブロックを使用してアニメーション化することをお勧めします。
[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];
ただし、自動レイアウトを使用していない場合は、コードが機能するはずです。上記の構文がiOS4以降で推奨されているだけです。
自動レイアウトを使用している場合は、(a)IBOutlet
垂直方向のスペース制約用にを作成し(以下を参照)、(b)次のような操作を実行できます。
- (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に-ドラッグするIBOutlet
だけです。control
ちなみに、コンストレイントをアニメーション化する場合は、そのイメージビューにリンクしている可能性のある他のコンストレイントに注意してください。多くの場合、画像のすぐ下に何かを配置すると、その制約が画像にリンクされるため、画像に制約のある他のコントロールがないことを確認する必要があります(それらを移動させたくない場合を除く) 。
自動レイアウトを使用しているかどうかは、ストーリーボードまたはNIBを開いてから、「ファイルインスペクター」(右端のパネルの最初のタブ、またはoption+ command+ 1(数字の「1」)を押して引き上げることができます)を選択することでわかります。 )::
iOS 6より前のサポートを計画している場合は、必ず「自動レイアウト」をオフにしてください。自動レイアウトはiOS6の機能であり、以前のバージョンのiOSでは機能しません。