ビューをある位置から別の位置に移動したいのですが、
self.view.center = CGPointMake(100, 200);
ただし、プロジェクトで自動レイアウトを使用している場合は、実行後にビューが元の位置に戻ります。
[self.view.superview setNeedsLayout];
では、実際にビューを新しい位置に移動するにはどうすればよいですか?
ビューをある位置から別の位置に移動したいのですが、
self.view.center = CGPointMake(100, 200);
ただし、プロジェクトで自動レイアウトを使用している場合は、実行後にビューが元の位置に戻ります。
[self.view.superview setNeedsLayout];
では、実際にビューを新しい位置に移動するにはどうすればよいですか?
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];
}];
}
autoLayoutを使用している場合は、制約を変更する必要があります。提案されている方法は、View Controllerに制約のアウトレットを作成してから、制約の定数を変更することです。時間があれば、ここに行って「例による自動レイアウト」または「自動レイアウトをマスターするためのベストプラクティス」をご覧になることをお勧めします。彼らは私を大いに助けてくれました。autoLayoutを使用すると、フレームの観点から考える必要がなくなるというのがポイントだと思います。したがって、中心の設定は自動レイアウトでは機能しません。ビューが互いにどのように関連しているかがすべてです。