私は非常に解決しやすいような奇妙な問題があります。私は、私が望むような行動を起こすためにいくつかの回避策を使うことができると思っていますが、もっと良い方法があるかどうかを知りたいのです。自動レイアウトと子ビューのUIViewアニメーション
私はUIView.animationを使用して高さを広げるcontentViewという名前のビューを持っていますが、これはまったく問題はなく、期待どおりです。
ここでの問題は、このビューは、このような22の底部に等しい自動レイアウト制約を有する子コンポーネント(ボタン)を有することである。
これはオートレイアウトの制約である:
アニメーションなしで高さを変更すると、表示の高さの変更とボタンは常にcontentViewの下部の22ポイントになります。しかし、アニメーションを使用してこのスムージーで使いやすいようにすると、アニメーションが開始される前にボタンが最後の位置に移動します。
は私がここに滑らかなアニメーションを実現することができる方法を知りたいが、ボタンとその親ビューに沿って移動
アニメーションを処理するコードの一部は非常に簡単ですが、私はよここでそれを投稿:サイドノートとして
@IBAction func openDetail(_ sender: ExpandCourseDetail) {
let rotation = sender.getOpen() ? CGAffineTransform.identity : CGAffineTransform(rotationAngle: CGFloat.pi)
UIView.animate(withDuration: 0.5, delay: 0.1, options: [.curveEaseInOut], animations: {
sender.transform = rotation
}, completion: {
success in
sender.setOpen(!sender.getOpen())
})
UIView.animate(withDuration: 1.0, delay: 0.5, options: [.curveEaseInOut], animations: {
self.contentView.frame.size.height = sender.getOpen() ? self.contentView.frame.height - 300 : self.contentView.frame.height + 300
}, completion: nil)
}
を、ボタン自体は、ビューが拡大しているユーザーを表示するには、ボタンを180度回転させるアニメーションを持っています。
ありがとうございました。
フレームサイズを設定するのではなく、heightConstraint.constantを変更することでcontentViewの高さを変更できます。それがうまくいくかどうかわからない。 (animateWithDurationの前に制約を設定し、アニメーションブロックでview.layoutIfNeededを呼び出す必要があります) –
autolayoutを使用している場合は、contentViewフレームを変更しないでください。高さの制約を与え、一定の値を調整しようとして self.view.layoutIfNeeded()を呼び、ボタンをそのcontentvViewの底に固定してください – karthikeyan