8

logo画像ビュー(下)を100ピクセル上にスライドさせようとしています。私はこのコードを使用していますが、何も起こりません:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3];
logo.center = CGPointMake(logo.center.x, logo.center.y - 100);
[UIView commitAnimations];

このコードはviewDidLoadメソッド内にあります。具体的には、logo.center = ...が機能していません。他のこと(アルファの変更など)は行います。たぶん私はそれを上にスライドさせるために正しいコードを使用していませんか?

4

2 に答える 2

41

自動レイアウト以外のストーリーボード/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

垂直拘束用のIBOutletを追加

ちなみに、コンストレイントをアニメーション化する場合は、そのイメージビューにリンクしている可能性のある他のコンストレイントに注意してください。多くの場合、画像のすぐ下に何かを配置すると、その制約が画像にリンクされるため、画像に制約のある他のコントロールがないことを確認する必要があります(それらを移動させたくない場合を除く) 。

自動レイアウトを使用しているかどうかは、ストーリーボードまたはNIBを開いてから、「ファイルインスペクター」(右端のパネルの最初のタブ、またはoption+ command+ 1(数字の「1」)を押して引き上げることができます)を選択することでわかります。 )::

自動レイアウト

iOS 6より前のサポートを計画している場合は、必ず「自動レイアウト」をオフにしてください。自動レイアウトはiOS6の機能であり、以前のバージョンのiOSでは機能しません。

于 2013-01-07T04:47:49.423 に答える
-1

試してみてください

logo.frame = CGRectMake(logo.frame.origin.x, logo.frame.origin.y - 100,logo.frame.size.width,logo.frame.size.height)
于 2013-01-07T04:23:14.410 に答える