は私が私の見解のlayoutConstraintsのいずれかをアニメーションいくつかの困難を抱えている遅らせている:私は使用期間または遅延は、アニメーションが即座に行われているものは何でもUIViewのアニメーションが期間に関してせずに即座に行うか
UIView.animate(withDuration: 1, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
self.topLayoutConstraint?.constant = self.currentYPosition
self.layoutIfNeeded()
}, completion: nil)
(私の意見は以前の位置から新しい位置にジャンプする)。
私はすべての値をチェックしており、それは正しいです。 私もチェックして、アニメーションと補完が呼び出されました。
アイデア?
EDIT:アニメーションブロックの前に制約を設定し
@objc private func viewDragged(_ recognizer: UIPanGestureRecognizer) {
let location = recognizer.location(in: self.superview)
switch recognizer.state {
case .ended:
if (recognizer.direction == .Down) { // Collapsing the slide panel
currentYPosition = parentViewHeight - minimumVisibleHeight - statusBarHeight - navBarHeight
}
else if (recognizer.direction == .Up) { // Expanding the slide panel
// Substracting `minimumVisibleHeight` so that the dragable part is hidden behind the navigation bar
currentYPosition = -minimumVisibleHeight
}
self.topLayoutConstraint?.constant = self.currentYPosition
UIView.animate(withDuration: 1, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
self.layoutIfNeeded()
}, completion: nil)
break
case .began:
HomeSlidePanelContainerView.draggingPreviousPosition = location.y
default:
self.layoutIfNeeded()
if (location.y < (parentViewHeight - minimumVisibleHeight - statusBarHeight - navBarHeight)
|| location.y > (statusBarHeight + navBarHeight)) {
currentYPosition -= HomeSlidePanelContainerView.draggingPreviousPosition - location.y
topLayoutConstraint?.constant = currentYPosition
self.layoutIfNeeded()
}
HomeSlidePanelContainerView.draggingPreviousPosition = location.y
break
}
}
'layoutIfNeeded()'の前に 'setNeedsUpdateConstraints()'を呼び出そうとしましたか? – werediver
@werediverはアニメーションやそれ以前のようですか?どちらの場合でも、nop私は – Moucheg
アニメーションブロックの 'self.topLayoutConstraint?.constant = self.currentYPosition'という行を持っていません。 – holex