2013-01-07 11 views
8

I(下記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 = ...は機能していません。他のもの(アルファの変更など)は行います。たぶん私はそれを上にスライドさせるための正しいコードを使用していないでしょうか?

+0

viewDidLoadメソッドの場合。それについて申し訳ありません! –

+1

オートレイアウトを使用していますか? – Rob

+0

ロブと同意して、あなたの例で与えられたコードから、これはあなたのアニメーションの途中で自動レイアウトを取得する際の問題と思われます。自動レイアウトを使用している場合、フレームを明示的に設定するのではなく、制約をアニメートする必要があります。 –

答えて

42

を試してみる、あなたのコードは大丈夫です。ところで、今、一般的に、あなたが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への制約から、ちょうど制御押しながらドラッグ:

add IBOutlet for vertical constraint

ところで、あなたは制約をアニメーション化している場合、Bあなたがその画像ビューにリンクしている他の制約に敏感です。イメージのすぐ下に何かを置くと、イメージに制約が設定されることがありますので、イメージに制約のある他のコントロールがないようにする必要があります(移動しない限り) 。

あなたが自動レイアウト使用している場合は、ストーリーボードまたはNIBを開いた後、「ファイルインスペクタ」(一番右のパネルの最初のタブを選択することによって言うことができるか、オプション + を押すことによって、それをプルアップすることができますコマンド + (番号 "1")):

autolayout on

はあなたが前のiOS 6をサポートすることを計画している場合、 "自動レイアウト" をオフにしてください、覚えておいてください。 AutolayoutはiOS 6の機能で、以前のバージョンのiOSでは動作しません。

+0

定数-50を使用すると、ビューが画面の上部に表示されなくなります。あなたが望むのは、元の一定値から50を引いた値です。 – rdelmar

+0

@rdelmarかなり正しいです。私は彼が画面からそれを動かしていたと推測しましたが、明らかに、定数を変更して、それが想定されていたものになるはずです。私はコードを変更しました。 – Rob

+0

ボタンでこれを行うと、タイトルがボタンの外側から適切な場所にアニメーション化される理由が分かりますか?私はアニメーション実験のいくつかでこれまで気づいていましたが、それは私には意味がありません - タイトルの制約はボタン自体の内部にあり、変更するべきではないと思います。 – rdelmar

-1

uは非自動レイアウトストーリーボード/ニブについては

logo.frame = CGRectMake(logo.frame.origin.x, logo.frame.origin.y - 100,logo.frame.size.width,logo.frame.size.height) 
関連する問題