2

バックグラウンドでパン効果を使用してゆっくりとアニメーション化したい 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 の両方で持続します。

4

1 に答える 1