22

ビューをある位置から別の位置に移動したいのですが、

self.view.center = CGPointMake(100, 200);

ただし、プロジェクトで自動レイアウトを使用している場合は、実行後にビューが元の位置に戻ります。

[self.view.superview setNeedsLayout];

では、実際にビューを新しい位置に移動するにはどうすればよいですか?

4

2 に答える 2

32

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

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

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

画像に示されているように、画像を左から右にアニメーション化する方法を紹介します。

アニメートする必要のあるコンストレイント用のIBOutletを作成します。ここでは、このビューを左から右に移動するのに十分な水平方向のスペースコンストレイントのみを使用しています。

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

ここに画像の説明を入力してください

アクション内Go Awayで、この制約の定数値を更新する必要があります。

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

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

これで、ビューを右端に移動する必要があります。アニメーションブロック内でこれを行っているので、左から右へ、またはその逆に素敵なアニメーションを見ることができます。プロダクションでは、次のような値をハードコーディングしないでください。コンセプトを明確にするためにここでそれを行うだけです。

ここに画像の説明を入力してください

アクション内でCome Back、定数を元の値にリセットしているので、オレンジ色の画像が元の場所にアニメーションで戻っているのがわかります。

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

    [UIView animateWithDuration:0.5 animations:^{
        [self.imageView layoutIfNeeded];
    }];
}
于 2013-11-12T07:23:20.763 に答える
14

autoLayoutを使用している場合は、制約を変更する必要があります。提案されている方法は、View Controllerに制約のアウトレットを作成してから、制約の定数を変更することです。時間があれば、ここに行って「例による自動レイアウト」または「自動レイアウトをマスターするためのベストプラクティス」をご覧になることをお勧めします。彼らは私を大いに助けてくれました。autoLayoutを使用すると、フレームの観点から考える必要がなくなるというのがポイントだと思います。したがって、中心の設定は自動レイアウトでは機能しません。ビューが互いにどのように関連しているかがすべてです。

于 2012-12-06T14:30:02.377 に答える