2012-12-06 20 views

答えて

14

autoLayoutを使用している場合は、制約を変更する必要があります。提案されている方法は、ビューコントローラにコンセントをコンセントにすることです。コンストレインの定数を変更します。時間があれば、私は間違いなくgoing hereをお勧めし、 "例で自動レイアウト"または "自動レイアウトをマスターするためのベストプラクティス"を見てください。彼らは私を助けてくれました。私は、取り除くべきポイントは、autoLayoutを使うと、もはやフレームの観点から考えないということです。だから、センターを設定するだけでは、自動レイアウトでは機能しません。それは、どのようにビューが互いに関連しているかということです。

+0

私はこれが最初では難しいですが、私は実際に良いことを好きに始めています、そのビュー – user1687717

+0

のすべてのコンセントを取得する必要がありますので、その使用して自動レイアウトは、ビューを移動するには、フレームを使用してより硬いようですね。あなたはそれでより多くを行うことができ、ここで第二@ClintWarnerを –

+0

:自動レイアウトは最初のセットアップに少しより多くの努力することができますが、それはメンテナンスや読みやすさの面で巨大な配当を支払います。今私は制約を実装することに慣れています。フレーム数学を使って作業するのは面倒で面倒なようです。 – followben

31

AutoLayoutを有効にすると、FORGET FRAMESとなり、アニメーション化するためにもフレームやセンターを変更することはできなくなります。レイアウトが呼び出されると、ビューの元の位置に戻ります。

代わりに同じ効果を得るにはconsider changing the constant value of the constraintにする必要があります。

以下の画像のようなユーザーインターフェイスを考えてみましょう。20 points leading space from it's superviewの画像ビューを持っています。つまり、スーパービューとの水平スペースの制約があります。さらに、画像ビュー、上部、幅、高さ。

画像に示すように、画像を左から右にアニメーション表示する方法を示します。

私たちはアニメーション化する必要があるためにIBOutletを作成します。ここでは、このビューを左から右に移動するのに十分な水平スペース制約のみをとります。 Go Awayアクションインサイド

@property (weak, nonatomic) IBOutlet UIImageView *imageView; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *horizontalSpaceConstraint; 

enter image description here

、私たちは、この制約の一定の値を更新する必要があります。

- (IBAction)moveFrontAction:(id)sender { 
    self.horizontalSpaceConstraint.constant = 220; 

    [UIView animateWithDuration:0.5 animations:^{ 
     [self.imageView layoutIfNeeded]; 
    }]; 
} 

は今、ビューは単にアニメーションブロック内ので、我々は生産versa.In右と副左から素敵なアニメーションを見ることができるようになりますことをやって右end.I'mに移動させなければならない、我々このような値をハードコードするべきではありません。コンセプトを明確にするために、ここでそれを行うだけです。 Come Backアクションインサイド

enter image description here

、我々は再び、それは元の値ですので、あなたが戻って元の場所にアニメーションオレンジ色の画像を見ることができるの定数をリセットしています。

- (IBAction)moveBackAction:(id)sender { 
    self.horizontalSpaceConstraint.constant = 20; 

    [UIView animateWithDuration:0.5 animations:^{ 
     [self.imageView layoutIfNeeded]; 
    }]; 
} 
+0

これは私の問題を解決していただきありがとうございます。 – jdog

+0

ちょっとuser1687717は、アニメーションスタイルを使用しないビューのタッチメソッドを使ってビューをスクロールしたいと考えています。 –

+1

制約の定数を変更する前に、 '[self.imageView layoutIfNeeded]'を呼び出す方が良いでしょう。ここには何の影響もありませんが、実際のプロジェクトでは他のアニメーションが実行されている可能性があります。従ってあなたのImageViewのがanimating.-前に、最終フレームをkhowなければならない '(IBAction)moveBackAction:(ID)、送信者{ [self.imageView layoutIfNeeded]。 self.horizo​​ntalSpaceConstraint.constant = 20; [UIView animateWithDuration:0.5アニメーション:^ { [self.imageView layoutIfNeeded]; }]; } ' –

関連する問題