高度限制动画“跳跃”

问题描述 投票:1回答:1

我一直在创建自己的UIControl子类以用于调整iDunnoU。除扩展/折叠动画外,我已经完成了UIControl。此动画的问题在于,展开/折叠时,它会“跳下” /上跳,而不是像我的原始模型一样平滑散开(请参阅下文)。

我已将代码上传到GitHub存储库,找到here。可以找到用于将控件添加到超级视图的代码here,可以找到用于设置高度约束的代码here,可以找到用于对高度约束进行动画处理的代码here

MockupiDunnoUMenuButton

ios swift autolayout uicontrol
1个回答
0
投票

[UIView.animate()可能有点棘手-您需要在正确的视图上调用.layoutIfNeeded()

用此替换isExpanded / didSet类中的iDUMenuButton

var isExpanded = false {
    didSet {
        if isExpanded != oldValue {
            if isExpanded {
                becomeFirstResponder()
                let haptics = UIImpactFeedbackGenerator(style: .rigid)
                haptics.impactOccurred()
            }
            guard let sv = self.superview else {
                // shouldn't happen, but let's be thorough
                fatalError("Self must have a superview!!!")
            }
            // not needed
            //self.layoutIfNeeded()
            UIView.animate(withDuration: 0.3) {
                self.heightConstraint.isActive = !self.isExpanded

                // call .layoutIfNeeded() on self's superview
                //self.layoutIfNeeded()
                sv.layoutIfNeeded()

                self.layer.shadowOpacity = self.isExpanded ? 1 : 0
                self.buttons.forEach { $0.setBadgeHidden(hidden: !self.isExpanded, animated: true) }
            }
            delegate?.menuButton(self, isExpandedDidUpdate: isExpanded)
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.