2017-09-04 9 views
0

私はアニメーション化する必要があるいくつかのコンポーネントがあります。私は長い間、問題なしでUIVIew.animate()を使ってきました。しかし、この場合、コンポーネントの1つはアニメーション化されません(具体的にはpullUpViewBottomCSTR)。アニメーションなしでビューを「ジャンプ」させるだけです(残りは期待どおりに動作します)。アニメーションはすべてのビュー(iOS)で動作しません

可能性のある説明を提供できますか(おそらく、すべてを貼り付けるためにスパムがあります)。私は非常に混乱しています。

UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseOut, animations: { 

      self.pullUpViewBottomCSTR!.constant = 0 
      self.mainImagePullUpBottomCSTR.constant = 0 

      self.obscuringFadeEffectView.alpha = 0; 

      self.layoutIfNeeded() 
     }) { (completed) in 
      // 
     } 
  1. 私は、所定の位置に任意の競合する制約を持っているとは思いません。

  2. このコードはUIViewのコンポーネントであり、UIViewControllerではなく、

  3. このコンポーネントをviewController内に読み込んでいます。私はUIViewControllerの中にすべてのものを持っていましたが、私はそれが対応する.xibファイルと.swiftファイルに移動するまで正しく動作すると思いました。

更新:次のように

制約がもともと追加されます。私は後でパン認識器を使用して、必要に応じて制約を更新しています

self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor) 
    self.pullUpViewBottomCSTR!.isActive = true; 
    self.pullUpViewBottomCSTR!.constant = 0 

(これは、関連するかもしれない)(とイムは、それへの参照を維持する理由です)。

+0

は() –

+0

現在のコンポーネントがないのUIViewController は、私は次の操作を実行しようとしてきたのUIView、あるself.view.layoutIfNeededを書いてみます。 doesntは動作するようです。そして、私は私が既にsuperviewでself.layoutIfNeeded()をやっているので、私はそれをしなければならないと思います。しかし、いずれにしても、残念ながら何も変更していません:/ –

+0

制約の初期値を確認してください(0以外)。 –

答えて

2

アニメーション化抱き合わせされているビューはselfであるが、その垂直位置はこの制約によって制御されます:あなたがこの制約を有効にすると

self.pullUpViewBottomCSTR = parentController.view.bottomAnchor.constraint(equalTo: self.bottomAnchor) 

self.pullUpViewBottomCSTR!.isActive = true 

それが制約に追加されますselfparentController.view(どちらか一方が他方の直系子孫であれば、それらのビューの1つである可能性があります)の最も初期の共通祖先です。その制約をアニメートするには、その最も早い共通祖先でlayoutIfNeeded()に電話する必要があります。

あなたはselfによって表されるビューがparentController.viewとどのように関連するかを示していないが、それはそのビューのsubviewであると仮定すると、その後、あなたがそれをアニメーション化することができます:アニメーションループの内部で

self.superview?.layoutIfNeeded() 

。また

parentController.view.layoutIfNeeded() 

は同様に動作するはずです。 self.pullupView.layoutIfNeeded():

+0

これは機能しました。私はなぜそれが事実であるか学ぶために非常に熱心です。アニメーションはUIView自体の内部で発生し、その中に含まれるすべてのサブビューが内部に含まれます。スーパービュー(この場合はUIViewController)を呼び出す必要があるのはなぜですか? 時間を割いてくれてありがとう、私はここで何をやっているのか理解できるように、私が正しい方向に向けることができれば非常に感謝しています。 もう一度ありがとうございます。 –

+0

私はより良い説明を与えるために答えを書き直しました。 – vacawama

関連する問題