2017-04-02 14 views
0

インターフェイスビルダーにプロパティをverticalからhorizontalに変更しました。問題は、2つの配置されたサブビューのアニメーションが生成され、そのうちの1つのビューが新しい位置に遷移している間に他のビューと重なり合うということです。`UIStackView`から軸アニメーションを取り除くことができません

私の場合は、特定のアニメーションだけを削除し、すぐに終了位置に表示するようにしたいと考えています。

私は私のVCでstackview層から上のすべてのアニメーションを削除しようとしています

public override func willTransition(to newCollection: UITraitCollection, 
            with coordinator: UIViewControllerTransitionCoordinator) { 

    coordinator.animate(alongsideTransition: { 
     _ in 
     // The first subview is `UIStackView`   
     self.view.subviews[0].layer.removeAllAnimations() 
    }) 

    super.willTransition(to: newCollection, with: coordinator) 
} 

そしてaxisプロパティが変更された場合には、(移行の間のどこかで発生するようですので、私は、アニメーションキーを観測しましたインタフェースビルダーによって自動的に設定されます)。残念ながら、レイヤーはanimationKeysnilをスタックビューとそのサブビュー/ arrangedSubviewsに返すので、私はそれに運が無かった。

class StackView : UIStackView { 

    override var axis: UILayoutConstraintAxis { 

     didSet { /* here */ } 
    } 
} 

答えて

0

これは難しいと思われます。 over hereの軸アニメーションがあなたが取り除こうとしているものなら、それはUIStackViewのデザインスペースの外側にあると確信しています。

「実際に終了位置に強制的に表示する」最適な解決策は、実際には各軸に対して1つのUIStackViewを持ち、その間で内容を回転させることです。

performWithoutAnimationブロックをviewWillTransition(to:with:)に入れて、完了時にupdateConstraintsIfNeededを呼び出すこともできます。多分それはうまくいくでしょう。私はそれの代わりに2つのビューのアイデアを持って行くだろう!

関連する問題