バックグラウンドでパン効果を使用してゆっくりとアニメーション化したい UIImageView があります。私の背景画像ビューには 4 つの制約があります。
- 最上部から最上部のレイアウト ガイドまでの距離 (ゼロ)
- 下から下のレイアウト ガイドまでの距離 (ゼロ)
- 幅 (850 で一定)
backgroundImageViewLeftMargin
スーパービューへの先行スペース (ゼロ、アウトレットとしてコードに接続)
画像ビューの表示モードは「アスペクト フィル」に設定されています。アプリを実行すると問題なく、静止画像が表示されます。ビューをアニメーション化するために次のコードを追加します。
-(void)animateBackgroundHorizontally:(BOOL)forward{
self.backgroundImageViewLeftMargin.constant = forward ? -500 : 0;
[self.backgroundImage setNeedsUpdateConstraints];
[UIView animateWithDuration:30 animations:^{
[self.backgroundImage layoutIfNeeded];
} completion:^(BOOL finished) {
[self animateBackgroundHorizontally:!forward];
}];
}
それから私は に電話[self animateBackgroundHorizontally:YES];
しviewWillAppear:
ます。何が起こるかは次のとおりです。
画像は、予期しない (ただし常に同じ) 場所 (画面の上部にあるはずの画面のほぼ中央にある上端) からアニメーションを開始し、最終的な位置に正しくアニメーション化され、元の位置に戻るときにアニメーション化されます。場所、それは正しくアニメーション化します。私がアニメーション化している唯一のプロパティは、左マージンです。アニメーション コードを呼び出さないと、正しく表示されます。画像に見られるように、アニメーションが間違った位置から始まるのはなぜですか? self.backgroundImage.translatesAutoresizingMaskIntoConstraints
両方に設定しようとしましたがYES
(同時に制約を満たすことができないというエラーが発生しました)、機能NO
しませんでした。この問題は、iOS 6 と iOS 7 の両方で持続します。